java - 当我的项目中没有任何实体时,如何将 native 查询映射到 POJO?

标签 java mysql hibernate jpa

我正在将 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/

相关文章:

java - Java 8 Stream 中的一些 Stateful Intermediate Operation 仍然是 Lazy seeking

mysql - 像存储过程参数一样使用 SQL LIKE 运算符

javascript 短代码将外部内容嵌入网站

mysql - 删除父级时 Hibernate/MySQL 级联错误

java - hibernate restrictions.in with and,怎么用?

java - 如何在 hibernate 中编写搜索查询

java - 如何在客户端服务中动态加载SPRING_PROFILES_ACTIVE值?

java - 开源图表和报告工具

java - 使用 Selenium 和 Java 13 自动化 Span

php - 在 php 中用 ' 替换每个 '