如何编写超类的Hibernate Criteria查询,并检查某些子类?

如何编写超类的Hibernate Criteria查询,并检查某些子类?,第1张

如何编写超类的Hibernate Criteria查询,并检查某些子类?

确实不清楚您想做什么。

首先,由于Foo继承自Bar,因此搜索Bar实例将自动返回Foo实例。Hibernate自己负责连接表。

第二:您的SQL查询确实很奇怪。您正在执行左联接(这意味着您正在搜索可能没有关联的foo的小节),但是foo.bar_id上的close位置也不为空。实际上,这构成了内部联接,可以重写为

select b.* from bar b inner join foo f on f.bar_id = b.id

如果您要搜索的是Foos,并且仅搜索Foos,则使用以Foo为根实体的条件:

getSession()    .createCriteria(Foo.class)    .list();

您将获得Foo实例,但是由于Foo扩展了Bar,因此这些Foo实例也是Bar实例。那就是继承。

现在,如果您要动态构建Criteria实例,并且意识到搜索必须只返回Foo实例,则必须使用隐式类属性:

Criteria c = getSession().createCriteria(Bar.class, "bar")// ...if (limitToFoos) {    c.add(Restrictions.eq("bar.class", Foo.class));}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4959731.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存