【问题标题】:Map any collection with NamedNativeQuery and SqlResultSetMapping使用 NamedNativeQuery 和 SqlResultSetMapping 映射任何集合
【发布时间】:2019-10-25 23:02:20
【问题描述】:

所以我正在编写本机查询,因为它们非常复杂,无法获取所有需要的数据等等。我目前面临一个通常由 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")
})

如何编写本机查询?这甚至可以在没有子查询的情况下实现,还是我必须为结果的每个数据行执行/执行子查询?我在心爱的谷歌上找不到东西。

【问题讨论】:

    标签: java sql oracle hibernate nativequery


    【解决方案1】:

    这是不可能的。

    SQL 查询的结果总是一张表。因此没有嵌套表,因此您无法将其映射到集合。

    【讨论】:

    • 有时我的愿望没有得到满足:D
    猜你喜欢
    • 2018-08-19
    • 1970-01-01
    • 2014-10-01
    • 2014-01-10
    • 2015-03-18
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多