我有一个复杂的本机查询,我正在尝试将其结果映射到非实体DTO类。我正在尝试使用JPA
的SqlResultSetMap
withConstructorResult
我的DTO类
@Data
public class Dto {
private Long id;
private String serial;
private Long entry;
private int numOfTasks;
}
我的entity类,它具有我将调用此本机查询结果的存储库接口。
@SqlResultSetMapping(
name = "itemDetailsMapping",
classes = {
@ConstructorResult(
targetClass = Dto.class,
columns = {
@ColumnResult(name = "ID"),
@ColumnResult(name = "SERIAL"),
@ColumnResult(name = "ENTRY"),
@ColumnResult(name = "TASKS")
}
)
}
)
@NamedNativeQuery(name = "getItemDetails", query = "complex query is here", resultSetMapping = "itemDetailsMapping")
@Entity
@Data
public class Item {}
存储库
@Repository
public interface ItemRepository extends JpaRepository<Item, Long> {
...
List<Dto> getItemDetails();
}
当我从ItemRepository调用getItemDetails()时,出现以下错误:
org.springframework.data.mapping.属性引用异常:没有属性项找到项目类型的详细信息
使用SqlResultSetMap
和ConstructorResult
并解决此问题的正确方法是什么。
任何帮助都将不胜感激。
要使用命名查询,命名查询的名称必须以实体名称作为前缀:
@NamedNativeQuery(name = "Item.getItemDetails",
query = "complex query is here", resultSetMapping = "itemDetailsMapping")
然后,接口方法必须与命名查询具有相同的名称,且不带前缀:
List<Dto> getItemDetails();
-
阅读参考文档中有关Spring数据JPA和命名查询的更多信息https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-方法。命名查询
问题内容: 我有一个带有本地查询的Spring Data Repository方法 并且我想将结果映射到Non-Entity POJO 。 是否可以,如果可以,请提供示例吗? 问题答案: 假设在Orid的答案中使用GroupDetails,您是否尝试过JPA 2.1 @ConstructorResult? 并在存储库界面中使用以下命令: 根据springJPA的数据文件,spring将首先尝试找到
并且我希望将结果映射到非实体POJO。 是否可能?如果可能,请提供一个例子?
我有一个Spring批处理应用程序,需要从4个表中进行选择。问题是,我无法使用关系,将编写Enricher来选择完整数据。 目前我有几个问题: 是否可以以简单的方式从JpaRepository映射非实体(POJO)。我看到了的示例。我正在寻找自动映射(也许是JPA,而不是Spring Data)。我可以用结果精确地制作列名,但它不起作用。 将POJO标记为实体没问题,但有问题。实体需要。这对我来说
此外,该实体需要一个id,我希望让jpa自动生成它,但我得到的是“Invalid Parameter:Unknown column name id.errorcode=-4460,sqlstate=null” 我的结果集包含4个相同的记录,而不是4个不同的记录,我认为这与我的id字段设置不正确有关 如果你能在这方面提供帮助,我将不胜感激,谢谢。
当我直接对我的db运行本机查询时,结果集看起来就像我所期望的那样。 当我从我的JpaRepository运行本机查询时,除了word始终为null之外,所有的东西都在那里工作。我似乎想不出如何将额外的字符串单词结果映射到实体中的一个字段。 有没有办法把这个弄到地图上?还是必须为所有字段创建一个完整的@SQLResultSetMapping(),并与本机查询耦合?(希望不会) 我刚才是在概括。以下是