使用 NamedNativeQuery 和 SqlResultSetMapping 映射任何集合
Map any collection with NamedNativeQuery and SqlResultSetMapping
所以我正在编写本机查询,因为它们非常复杂,无法获取所有需要的数据等等。我目前面临的问题通常由 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")
})
我必须如何编写本机查询?这甚至可能没有子查询,还是我必须 do/execute 结果的每个数据行的子查询?我无法在 beloved google.
上找到任何内容
这不可能。
SQL 查询的结果总是 table。所以没有嵌套的 tables,因此你不能将它映射到集合。
所以我正在编写本机查询,因为它们非常复杂,无法获取所有需要的数据等等。我目前面临的问题通常由 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")
})
我必须如何编写本机查询?这甚至可能没有子查询,还是我必须 do/execute 结果的每个数据行的子查询?我无法在 beloved google.
上找到任何内容这不可能。
SQL 查询的结果总是 table。所以没有嵌套的 tables,因此你不能将它映射到集合。