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

栏目: Hibernate · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/56843/looking-for-an-hql-builder-hibernate-query-language
我正在寻找 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


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Kotlin程序员面试算法宝典

Kotlin程序员面试算法宝典

孙伟、楚秦 / 机械工业出版社 / 2018-12 / 69

本书是一本讲解程序员面试笔试算法的书籍。在写法上,除了讲解如何解答算法问题以外,还引入了例子辅以说明,以便读者能够更加容易地理解。 本书将程序员面试笔试过程中的各类算法类真题一网打尽。在题目的广度上,通过各种渠道,搜集了近3年来几乎所有IT企业面试笔试算法高频题目,所选择题目均为企业招聘使用题目;在题目的深度上,本书由浅入深、庖丁解牛式地分析每一个题目,并提炼归纳,同时,引入例子与源代码、时......一起来看看 《Kotlin程序员面试算法宝典》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具