使用NamedNativeQuery和SqlResultSetMapping

时间:2019-06-11 13:41:18

标签: java sql oracle hibernate nativequery

所以我正在编写本机查询,因为它们非常复杂,无法获取所有需要的数据,依此类推。我目前遇到的问题通常是由Hibernate / JPA等完成的。

想象一下:

@Entity
FooEntity{
     @Id
     public Long id;
     @ManyToMany
     public List<FeeEntity> feeEntities;
}

@Entity
FeeEntity{
     @Id
     public Long id;
     @Column
     public String name;
}

还有一些DTO

FooDTO{
     private final Long id;
     private final List<FeeDTO> someStrings;

     public FooDTO(Long id, List<FeeDTO> feeDtos){
          ...
     }
}

我的@SqlResultSetMapping基本上像

@SqlResultSetMapping(name = "FooDTO", 
     classes = @ConstructorResult(targetClass = FooDTO.class, columns = {
          @ColumnResult(name = "id", type = Long.class),     
          //TODO @ColumnResult(name = "feeDtos", type = FeeDtos.class)     
     })
)

命名的本机查询类似于:

@NamedNativeQueries({
    @NamedNativeQuery(
                name = "FooData",
                query = "SELECT MAINSELECT.ID AS id, " +
                        "???" +
                        " FROM Foo MAINSELECT WHERE ... " +
                        ...,
                resultSetMapping = "FooDTO")
})

如何编写本机查询?即使没有子查询,这是否有可能,还是我必须对结果的每个数据行都执行/执行子查询?我无法在心爱的Google上找到一些东西。

1 个答案:

答案 0 :(得分:0)

那不可能。

SQL查询的结果始终是一个表。因此没有嵌套表,因此无法将其映射到Collection。