JPA/HIBERNATE 如何处理非 POJO 实体对象

3

我有三个类。ClassA和ClassB是经典的POJO实体,映射到数据库中。我想要一个第三个ClassC,在数据库中执行一个特定且复杂的查询(不与任何表格映射)使用HQL。是否可以在ClassC上添加@Entity注释,并将其持久化仅用于读取?

我正在阅读文档,以找到映射以下(示例)SQL语句的方法:

select 
 a.id, b.name, c.city
from
 emp a, identity b, address c
where
 a.id = b.id and a.id = c.id

我不想创建emp、identity和address的领域对象和映射。
我只需要一个对象,映射到SQL语句的输出。
public class Data {
 private int id;
 private String name;
 private String city;
 // ... and other details ...
}

从技术上讲,这应该是存储过程或视图的工作。不幸的是,我无法更改数据库。

如果有任何帮助/指针,将不胜感激。


为什么你想要使用@Entity创建一个类,仅用于创建HQL查询?只有当类在数据库中具有映射表时,才必须使用@Entity注释。 - Chaitanya
实际上,我想让ClassC执行一些报告。我希望像使用@Entity注释的ClassA或ClassB一样使用此类。在这个ClassC中,每个字段都是特定HQL请求的结果,以便我的应用程序仍符合MVC模式。 - user3770624
1个回答

1
您可以将复杂的SQL查询作为视图创建,并将实体映射到该视图。基本上,视图只是一个只读表格(在Oracle中您可以将其作为读写表格,但这是另一回事 :)),因此任何Hibernate映射都可以很好地作为只读实体。我以前使用过纯Hibernate和hbm文件实现过这个功能。我从未尝试使用JPA或注释,但我不认为它不能正常工作。

谢谢您的回答。这是一个很好的方法,但我不想修改数据库,只想执行一些HQL请求并将每个HQL请求保存到ClassC的字段中,我希望像使用@Entity类一样使用ClassC。 - user3770624

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接