我正在将 ETL 过程从工具转换为 Java 批处理 API 应用程序。在这个ETL过程中。在当前版本(使用该工具)中,我们有许多连接不同表的 SQL 语句以生成所需的输出。转换为 Java,JPA 现在可用。
我想使用 native 查询。这很好,因为它不需要为查询中使用的每个表创建实体,而且我可以将 POJO 用于查询结果(而且,我不需要重写查询)。读书this answer我知道我可以使用 @SqlResultSetMapping
。问题是我的项目中没有任何实体,所以我不知道把这个注解放在哪里。有什么地方可以放置此注释以便实体管理器找到它吗?
PS:在我的概念证明中,我目前正在手动将对象数组转换为 POJO,但我真的不喜欢这种方法。
向 POJO 添加 @Entity
注解将导致我的应用程序无法启动:
Caused by: org.hibernate.HibernateException: Missing table: MyTable
我不确定(现在正在搜索),但我认为这可能是由我的 persistence.xml 中的这个属性引起的
<property name="hibernate.hbm2ddl.auto" value="validate"/>
最佳答案
实际上我找到了 answer I was looking for :
我可以在 orm.xml 中使用 XML 定义 @SqlResultSetMapping
的行为,所以这个定义:
@SqlResultSetMapping(
name = "BookValueMapping",
classes = @ConstructorResult(
targetClass = BookValue.class,
columns = {
@ColumnResult(name = "id", type = Long.class),
@ColumnResult(name = "title"),
@ColumnResult(name = "version", type = Long.class),
@ColumnResult(name = "authorName")}))
将像这样在 XML 中定义:
<sql-result-set-mapping name="BookValueMappingXml">
<constructor-result target-class="org.thoughts.on.java.jpa.value.BookValue">
<column name="id" class="java.lang.Long"/>
<column name="title"/>
<column name="version" class="java.lang.Long"/>
<column name="authorName"/>
</constructor-result>
</sql-result-set-mapping>
允许我在不需要实体的情况下定义它。
关于java - 当我的项目中没有任何实体时,如何将 native 查询映射到 POJO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30595445/