Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将结果集映射到JPA中的自定义POJO_Java_Spring_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java 如何将结果集映射到JPA中的自定义POJO

Java 如何将结果集映射到JPA中的自定义POJO,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我需要通过连接3个不同的表来获取6列。我在entity类的顶部将它们声明为NamedNativequery,并使用了JPA格式的create命名查询方法。当我尝试获取结果集时,我得到的是数组对象列表,而不是POJO类型的对象列表。要将结果集映射到外部POJO,是否需要定义任何外部映射?您可以使用投影指定要获取的属性 或者直接使用JPQL获取: Repository.java 你当然可以。这将有助于: @NamedNativeQuery(query = "SELECT t1.col1, t2.c

我需要通过连接3个不同的表来获取6列。我在entity类的顶部将它们声明为NamedNativequery,并使用了JPA格式的create命名查询方法。当我尝试获取结果集时,我得到的是数组对象列表,而不是POJO类型的对象列表。要将结果集映射到外部POJO,是否需要定义任何外部映射?

您可以使用投影指定要获取的属性

或者直接使用JPQL获取:

Repository.java
你当然可以。这将有助于:

@NamedNativeQuery(query = "SELECT t1.col1, t2.col2 FROM t1 JOIN t2 ON ...", name = "MyNamedQuery", resultSetMapping = "MyPojoMapper")
@SqlResultSetMapping(name = "MyPojoMapper", classes = @ConstructorResult(
    targetClass = MyPojo.class,
    columns = {
            @ColumnResult(name = "col1", type = String.class),
            @ColumnResult(name = "cols", type = String.class)
    }))
然后按如下方式使用:

NativeQuery query = session.getNamedNativeQuery("MyNamedQuery");
MyPojo result = (MyPojo) query.getSingleResult();

我们可以在实体类中定义相同的查询并使用命名查询将结果集映射到DTO吗?>我们可以在实体类中定义相同的查询并使用命名查询将结果集映射到DTO吗?是的,你能做到。但在一些复杂的情况下,我认为命名查询是不够的(例如:动态查询)。当我在命名查询中执行相同操作时,我会得到一个DTO异常,无法识别。我们可以在这里进行强制转换,比如DB将有数字,POJO将有字符串吗?反之亦然??
@NamedNativeQuery(query = "SELECT t1.col1, t2.col2 FROM t1 JOIN t2 ON ...", name = "MyNamedQuery", resultSetMapping = "MyPojoMapper")
@SqlResultSetMapping(name = "MyPojoMapper", classes = @ConstructorResult(
    targetClass = MyPojo.class,
    columns = {
            @ColumnResult(name = "col1", type = String.class),
            @ColumnResult(name = "cols", type = String.class)
    }))
NativeQuery query = session.getNamedNativeQuery("MyNamedQuery");
MyPojo result = (MyPojo) query.getSingleResult();