我正在将ETL流程从工具转换为Java批处理API应用程序。在此ETL过程中。在当前版本中(使用该工具),我们有许多SQL语句连接不同的表以生成所需的输出。现在可以将JPA转换为Java。
我想使用本机查询。这样做会很不错,因为它不需要为查询中使用的每个表创建实体,并且我可以将POJO用于查询的结果(而且,我不需要重写查询)。我知道我可以使用@SqlResultSetMapping
。问题是我的项目中没有任何实体,因此我不知道将该注释放在何处。我可以在任何地方放置此注释,以便实体管理器找到它吗?
PS:在概念验证中,我目前正在手动将对象数组转换为POJO,但是我真的不喜欢这种方法。
将@Entity
注释添加到POJO将导致我的应用程序无法启动:
原因:org.hibernate.HibernateException:缺少表:MyTable
我不确定(现在正在搜索),但是我认为它可能是由我的persistence.xml中的此属性引起的
<property name="hibernate.hbm2ddl.auto" value="validate"/>
实际上,我找到了想要的答案:
我可以@SqlResultSetMapping
在orm.xml中使用XML 来定义的行为,因此可以使用以下定义:
@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>
让我无需实体即可进行定义。
我想使用本机查询。这会很好,因为它不需要为查询中使用的每个表创建实体,并且我可以为查询结果使用POJO(而且,我也不需要重写查询)。通过阅读这个答案,我知道我可以使用。问题是我的项目中没有任何实体,所以我不知道该把这个注释放在哪里。有什么地方我可以把这个注释放在实体管理器找到它吗? PS:在我的概念证明中,我目前正在手动将对象数组转换为POJO,但我真的不喜欢这种方法。 将注释添加到POJO将导致
当我直接对我的db运行本机查询时,结果集看起来就像我所期望的那样。 当我从我的JpaRepository运行本机查询时,除了word始终为null之外,所有的东西都在那里工作。我似乎想不出如何将额外的字符串单词结果映射到实体中的一个字段。 有没有办法把这个弄到地图上?还是必须为所有字段创建一个完整的@SQLResultSetMapping(),并与本机查询耦合?(希望不会) 我刚才是在概括。以下是
我有一个复杂的本机查询,我正在尝试将其结果映射到非实体DTO类。我正在尝试使用的with 我的DTO类 我的entity类,它具有我将调用此本机查询结果的存储库接口。 存储库 当我从ItemRepository调用getItemDetails()时,出现以下错误: org.springframework.data.mapping.属性引用异常:没有属性项找到项目类型的详细信息 使用和并解决此问题的
问题内容: 我有一个带有本地查询的Spring Data Repository方法 并且我想将结果映射到Non-Entity POJO 。 是否可以,如果可以,请提供示例吗? 问题答案: 假设在Orid的答案中使用GroupDetails,您是否尝试过JPA 2.1 @ConstructorResult? 并在存储库界面中使用以下命令: 根据springJPA的数据文件,spring将首先尝试找到
并且我希望将结果映射到非实体POJO。 是否可能?如果可能,请提供一个例子?
我尝试使用的将本机SQL查询映射到POJO类,如下所示: 然后,为了在创建本机查询时使用声明的结果集映射,我通过它的名称引用它: 但这对我不起作用,我得到以下错误: