首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPQL -在查询中投影@Embeddable

JPQL -在查询中投影@Embeddable
EN

Stack Overflow用户
提问于 2019-06-21 17:43:49
回答 2查看 165关注 0票数 0

假设我的域类是这样的:

代码语言:javascript
复制
class A{
  private Integer id;
  private Embded e;
}

@Embeddable
class Embded{
  private String emb;
}

下面是我的DTO类:

代码语言:javascript
复制
class ADto{
  private Integer id;
  private Embded e;
}

class EmbdedDto{
  private String emb;
}

是否可以将内部Embded对象作为EmbdedDto的投影进行查询?如下所示:

代码语言:javascript
复制
@Query("SELECT new namespace.ADto(a.id, new namespace.EmbdedDto(a.e.emb)) FROM A a");

有没有可能使用MapStruct或类似的东西自动完成?

EN

回答 2

Stack Overflow用户

发布于 2019-06-21 23:30:37

只需创建一个带有可嵌入键参数的构造函数,就像这样:

代码语言:javascript
复制
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;
    }
}

现在,您可以:

代码语言:javascript
复制
@Query("SELECT new namespace.ADto(a.id, a.e.emb) FROM A a");
票数 1
EN

Stack Overflow用户

发布于 2019-06-22 21:46:59

您可以使用MapStruct将A映射到ADto (假设ADto中有一个拼写错误,并且您打算包含EmbeddedDto而不是Embedded)。

只需定义一个映射器

代码语言:javascript
复制
@Mapper
public interface SomeMapper {

     SomeMapper INSTANCE = Mappers.getMapper(SomeMapper.class);

     ADto map(A in);
} 

Mapstruct还将自动生成Embedded to EmbeddedDto的方法

不确定这在JPQL中是否可行(我在这里不熟悉,但从您的示例中可以调用java),但您可以尝试:

代码语言:javascript
复制
@Query("SELECT SomeMapper.INSTANCE.map(a) FROM A a");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56700859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档