当前位置: 首页 > 面试题库 >

如何使用SqlResultSetMapping将JPA NativeQuery的结果集映射到POJO

轩辕啸
2023-03-14
问题内容

我正在尝试使用@SqlResultSetMapping和@ConstructorResult将本机查询的结果映射到POJO。这是我的代码

@SqlResultSetMapping(name="foo",
    classes = {
        @ConstructorResult(
                targetClass = Bar.class,
                columns = {
                    @ColumnResult(name = "barId", type = Long.class),
                    @ColumnResult(name = "barName", type = String.class),
                    @ColumnResult(name = "barTotal", type = Long.class)
                })
    })

public class Bar {

private Long barId;
private String barName;
private Long barTotal;

...

然后在我的DAO中:

Query query = em.createNativeQueryBar(QUERY, "foo");
... set some parameters ...
List<Bar> list = (List<Bar>) query.getResultList();

我已经读到JPA 2.1仅支持此功能,但这就是我正在使用的功能。这是我的依赖项:

        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
        </dependency>

我发现了一些资源,其中包括:jpa2.1中的@ConstructorResult映射。但是我仍然没有运气。

我想念什么?为什么找不到SqlResultSetMapping?

javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown SqlResultSetMapping [foo]

问题答案:

@SqlResultSetMapping注释 不应放在POJO上 。放在(任何)@Entity课上。“ Unknown
SqlResultSetMapping [foo]”告诉您,JPA提供程序在名称“foo”下看不到任何映射。请参阅我的另一个答案以获取正确的示例



 类似资料:
  • 我正在尝试使用@SQLResultSetMapping和@ConstructorResult将本机查询的结果映射到POJO。下面是我的代码: 我找到了一些参考资料,其中包括JPA2.1中的@ConstructorResult映射。但我还是没有运气。 我错过了什么?为什么找不到SqlResultSetMapping?

  • 我有一个用户类,有16个属性,比如名字,姓氏,出生日期,用户名,密码等...这些都存储在MySQL数据库中,当我想要检索用户时,我使用ResultSet。我想将每一列映射回用户属性,但我这样做的效率似乎非常低。例如,我正在做: 也就是说,我检索所有的列,然后通过将所有的列值插入用户构造函数来创建用户对象。 有人知道更快、更整洁的方法吗?

  • 我需要通过连接3个不同的表来获取6列。我在entity类的顶部将它们声明为NamedNativequery,并且使用了create named query method form JPA。当我尝试fo获取结果集时,我得到的是数组对象列表,而不是POJO类型的对象列表。为了将结果集映射到外部POJO,我应该定义任何外部映射吗?

  • 我在寻找更“改进的方法”来实现这一点,我有一种方法,从一个id中获取所有记录,然后“映射”到一个类中,我有大约200个“标记”要映射,这将是一个非常长的if链。。。例子:

  • 我开始使用JOOQ和dvd租赁商店数据库aka sakila。基本上,我想找一个演员和他的角色(我创建的表)。到目前为止,我想到了这个: 我希望能够将演员及其角色提取到一个对象中:DTO。我找到了这篇文章https://arnaudroger.github.io/blog/2017/03/02/jooq-one-to-many-without-dto.html但我发现使用sfm的解决方案过于冗长,

  • 我有一个Spring批处理应用程序,需要从4个表中进行选择。问题是,我无法使用关系,将编写Enricher来选择完整数据。 目前我有几个问题: 是否可以以简单的方式从JpaRepository映射非实体(POJO)。我看到了的示例。我正在寻找自动映射(也许是JPA,而不是Spring Data)。我可以用结果精确地制作列名,但它不起作用。 将POJO标记为实体没问题,但有问题。实体需要。这对我来说