我们现在使用QueryDSL进行数据库查询,但我认为这个问题更普遍地与hibernate相关..
我想知道:HQL是否将我查询的实体放入Hibernate上下文/缓存中,以便可以从那里访问它们?我在想,如果我为实体运行一个大的leftjoin
,显式收集所有子关系,如果我可以告诉Hibernate在将结果映射到我的实体对象时使用该信息,我应该可以节省延迟加载。我只是不知道怎么做…
例如:A有B,B有C。现在,如果我构建查询以获取某个a的所有
,并将其与B和C连接(查询DSL实现):
List<A> as = query.from(QA.a).leftJoin(QA.a.b,QB.b).leftJoin(QB.b.c,QC.c).where(a.id.eq("1)).fetchAll();
我会得到一份漂亮的SQL声明,上面写着
select... from A inner join B ... inner join C ... where ...
所以结果应该足以让hibernate初始化
as.get(index).getBs()
as.get(index).getBs().get(index).getCs()
但它不会这样做,而是运行查询
select ... from B where B.aId = ??
是否有可能通过初始化具有一个子级的实体来减少这些延迟加载,或者我希望太多?
如果我用一个连接加载所有数据,hibernate会把它们放在缓存中吗?它会为那些延迟加载访问缓存吗?还是会轮询数据库?我在这方面有发言权吗?还是完全不受我控制?
谢谢@all!
对不起,我忘记在我的帖子中提到这个了。我确实尝试使用fetch
,但没有成功。结果解决方案是使用
@Fetch(FetchMode.JOIN)
在实体属性。
在 HQL 查询中,您需要使用 fetch
关键字来执行此操作:
select a from A a left join fetch a.cs b left join fetch b.cs where ...
这在Hibernate文档中有很好的解释。
我从来没有使用过QueryDSL,但是根据它的留档,你只需要在每次连接后调用fetch()方法来添加这个fetch关键字:
query.from(QA.a).leftJoin(QA.a.b,QB.b).fetch().leftJoin(QB.b.c,QC.c).fetch().where...
我正在使用hibernate 4.x,想在HQL查询中设置MySQL的“SQL_NO_CACHE”语句 目前生产 但我想要 但我不知道怎么做。 使用本机查询没有问题,但所有查询都是用HQL编写的,比本例复杂得多。因此,我得到了一个<code>QuerySyntaxException:意外的标记</code>异常,因为在hibernate文档中无论如何都没有记录该语句。 http://docs.jb
今天我学习了一个教程,作者在其中解释了hibernate关联一对多/多对一。我不想把他所有的代码都写在这里。所以,我试着把重点放在。。。 我们有两个实体:“团队”和“球员” 在代码中,我们有: 和 我最感兴趣的是回迁的类型。所以,我们加入了一支球队和一些属于这支球队的球员。我的DAO类标记为 现在我想从数据库中加载充满玩家集合的团队实体。 结果是,我将得到LazyInitializationExc
我用Hibernate的JPQL查询获取了一个公司实体。该实体与关键字实体有多对多关联。由于联接表有一个额外的列处于活动状态,因此该表已映射到一个公司关键字实体。所以协会是这样的: 公司 现在,来自实体的关联是惰性的,并且它不会被我的JPQL查询初始化,因为我想避免产生笛卡尔产品性能问题。这就是为什么我想在运行JPQL查询后初始化关联,例如: 对于“正常的”多对多关联,这将非常有效,因为所有关联实
问题内容: 我想编写一个方法,该方法返回按字段“ serviceId”分组的最后添加的对象的列表。 以下HQL可以使用,但我想使用Criteria API编写: 像这样: 提前致谢。 编辑: 现在,我需要使用eclipselink API = /的类似查询, 基本上,我需要最后N行(最大日期),该状态是下面所述的五行之一,按serviceId列分组。 由于我的经验不足,这是我所能做到的最好的: 缺
问题内容: 我一直在阅读Hibernate文档,但没有发现任何可以解释如何执行以下操作的内容。 我尝试将以下SQL代码转换为HQL: 我遇到的主要问题是我无法在LEFT OUTER JOIN上有两个子句。HQL允许我拥有 ,但是如何添加 问题答案: 您可以使用关键字添加额外的加入条件,如下所示(取决于您的映射): 也可以看看: 16.3。协会和加盟
在这个项目中,持久层使用了Hibernate,但是模型-数据库映射主要是用JPA注释配置的。< br> Hibernate升级变得很困难,因为新的Hibernate版本在SQL中生成了不必要的连接,而HQL没有改变。所以我们正在寻找其他的选择来代替Hibernate的HQL解析器。< br >使用QueryDSL可以构建HQL风格的查询并让QueryDSL生成SQL吗?