【问题标题】:JPA/HIBERNATE Handle non POJO entityJPA/HIBERNATE 处理非 POJO 实体
【发布时间】:2014-09-30 21:58:33
【问题描述】:

我有三门课。 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、身份和地址创建域对象和映射。

我只想拥有一个对象,映射到 sql 语句的输出。

public class Data {
 private int id;
 private String name;
 private String city;
 // ... and other details ...
}

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

任何帮助/指针将不胜感激。

【问题讨论】:

  • 为什么要使用@Entity 创建一个类只是为了创建 HQL 查询?只有当类在 DB 中有映射表时,您才必须使用实体注释。
  • 其实我希望 classC 执行一些报告。我想使用这个类,就像我使用带有 @Entity 注释的 classA 或 ClassB 一样。在这个 classC 中,每个字段都是特定 HQL 请求的结果,因此我的应用程序仍然匹配 MVC 模式。

标签: hibernate jpa persistence hql pojo


【解决方案1】:

您可以将非常复杂的 SQL 查询创建为视图并将您的实体映射到该视图。基本上,视图只是一个只读表(您可以在 Oracle 中将其设为读写,但这是另一回事 :))因此任何休眠映射都可以作为只读实体正常工作。我以前做过,但几年前使用普通的 Hibernate 和 hbm 文件。我从未尝试过使用 JPA 或注释,但我不明白为什么它不起作用。

【讨论】:

  • 感谢您的回答。这是一个很好的方法,但我不想修改数据库只是执行一些 HQl 请求并将每个 HQL 请求保存到 classC 的字段中,我想像使用 @Entity 类一样使用 classC。
猜你喜欢
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
  • 2016-03-24
  • 1970-01-01
  • 2010-10-31
  • 2017-05-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多