假设我的域类是这样的:
class A{
private Integer id;
private Embded e;
}
@Embeddable
class Embded{
private String emb;
}下面是我的DTO类:
class ADto{
private Integer id;
private Embded e;
}
class EmbdedDto{
private String emb;
}是否可以将内部Embded对象作为EmbdedDto的投影进行查询?如下所示:
@Query("SELECT new namespace.ADto(a.id, new namespace.EmbdedDto(a.e.emb)) FROM A a");有没有可能使用MapStruct或类似的东西自动完成?
发布于 2019-06-21 23:30:37
只需创建一个带有可嵌入键参数的构造函数,就像这样:
class ADto{
private Integer id;
private EmbdedDto e;
public ADto(Integer id, String emb) {
this.id = id;
this.e = new EmbdedDto(emb);
}
}
@Embeddable
class EmbdedDto{
private String emb;
public EmbdedDto(String emb) {
this.emb = emb;
}
}现在,您可以:
@Query("SELECT new namespace.ADto(a.id, a.e.emb) FROM A a");发布于 2019-06-22 21:46:59
您可以使用MapStruct将A映射到ADto (假设ADto中有一个拼写错误,并且您打算包含EmbeddedDto而不是Embedded)。
只需定义一个映射器
@Mapper
public interface SomeMapper {
SomeMapper INSTANCE = Mappers.getMapper(SomeMapper.class);
ADto map(A in);
} Mapstruct还将自动生成Embedded to EmbeddedDto的方法
不确定这在JPQL中是否可行(我在这里不熟悉,但从您的示例中可以调用java),但您可以尝试:
@Query("SELECT SomeMapper.INSTANCE.map(a) FROM A a");https://stackoverflow.com/questions/56700859
复制相似问题