Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Hibernate中用单独的队列填充实体的字段?_Java_Hibernate_Orm_Jpa - Fatal编程技术网

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:我回答得太快了,这正是我发布的链接显示的内容: