java – 寻找HQL构建器(Hibernate查询语言)

我正在寻找Java中的 HQL

构建器.我想摆脱像这样的事情:

StringBuilder builder = new StringBuilder()
    .append("select stock from ")
    .append( Stock.class.getName() )
    .append( " as stock where stock.id = ")
    .append( id );

我宁愿有类似的东西:

HqlBuilder builder = new HqlBuilder()
    .select( "stock" )
    .from( Stock.class.getName() ).as( "stock" )
    .where( "stock.id" ).equals( id );

我google了一下,我找不到一个.

我写了一个快速&愚蠢的HqlBuilder现在适合我的需求,但我很想找到一个比我单独拥有更多用户和测试的人.

注意:我希望能够做到这样的事情以及更多,我没有使用Criteria API

select stock
from com.something.Stock as stock, com.something.Bonus as bonus
where stock.someValue = bonus.id

即.选择其属性someValue指向奖金表中任何奖金的所有股票.

谢谢!

@ Sébastien Rocca-Serra

现在我们得到了具体的地方.您尝试做的联接实际上并不是通过Criteria API实现的,但是子查询应该完成同样的事情.首先,为奖励表创建一个DetachedCriteria,然后使用IN运算符获取someValue.

DetachedCriteria bonuses = DetachedCriteria.forClass(Bonus.class);
List stocks = session.createCriteria(Stock.class)
    .add(Property.forName("someValue").in(bonuses)).list();

这相当于

select stock
from com.something.Stock as stock
where stock.someValue in (select bonus.id from com.something.Bonus as bonus)

唯一的缺点是,如果您在someValue中引用了不同的表,并且您的ID在所有表中都不是唯一的.但是你的查询会遇到同样的缺陷.

翻译自:https://stackoverflow.com/questions/56843/looking-for-an-hql-builder-hibernate-query-language

原文 

https://codeday.me/bug/20190112/510187.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » java – 寻找HQL构建器(Hibernate查询语言)

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址