Java 如何在Hibernate中用单独的队列填充实体的字段?
比如说,我有一个实体Java 如何在Hibernate中用单独的队列填充实体的字段?,java,hibernate,orm,jpa,Java,Hibernate,Orm,Jpa,比如说,我有一个实体 @Entity public class Category { private String name; private int usersInCategory; } 我想用一些聚合SQL查询选择计数*填充usersInCategory字段。。。分组方式 在Hibernate中如何执行此操作 使用这是一个特定于Hibernate的注释。从文件中: 有时,您希望数据库执行以下操作: 给你一些计算,而不是 在JVM中,您还可以创建一些 一种虚拟列。你可以使用 SQ
@Entity
public class Category {
private String name;
private int usersInCategory;
}
我想用一些聚合SQL查询选择计数*填充usersInCategory字段。。。分组方式
在Hibernate中如何执行此操作 使用这是一个特定于Hibernate的注释。从文件中:
有时,您希望数据库执行以下操作:
给你一些计算,而不是
在JVM中,您还可以创建一些
一种虚拟列。你可以使用
SQL片段aka公式,而不是
将属性映射到列。这
属性的类型是只读的
值由您的公式计算
碎片
@Formula("obj_length * obj_height * obj_width")
public long getObjectVolume()
SQL片段可以非常复杂
您需要甚至包括子选择
正如文档所写,SQL片段可能非常复杂,并且可以引用所属实体,如下面的示例所示,where子句的o.customer_id=id部分中的非别名id列引用所属实体列:
@Formula("(select coalesce(extract ('day' from age(max(o.creation_date))), 9999) from Orders o where o.customer_id = id)")
private int daysSinceLastOrder;
另见
另一种方法是执行以下检索查询:
select c, (select count(i) from Item i where c = i.category) from Category c
这将生成元组列表categrouy、items\u count。初始化实体字段的初始任务不会以这种方式完成,但当您不需要始终使用该字段时,这将更加有效。+1您提供的链接非常好。但我更喜欢使用@Formula以外的其他方法,例如,作为视图映射的辅助表instance@Arthur谢谢在国际海事组织,上述链接比文档做得好得多,它们应该包括其内容。关于Forumula vs Views,一如往常,这取决于:我还没有时间进行测试,但加载实体时会对DB发出多少请求?一个或两个顺序?嗯,实际上会有一个请求将被嵌入选择,我已经检查过了:@glaz666:我回答得太快了,这正是我发布的链接显示的内容: