Вложенная проекция в QueryDSL (mysema)
Я пишу запрос с mysqma.querydsl версии 4.1.4, и мне нужно спроектировать прямые свойства (attrs) и вложенные свойства и некоторые атрибуты этих вложенных свойств, а не все attrs.
У меня есть две сущности:
@Entity
@Table(name = "p_libro_visado", schema = "lab", catalog = "catastro")
public class PLibroVisadoEntity {
private long id;
private int cantLamina;
private Integer idLibro;
private TipovisadoEntity tipovisado;
@Id
@Column(name = "id")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Basic
@Column(name = "cant_lamina")
public int getCantLamina() {
return cantLamina;
}
public void setCantLamina(int cantLamina) {
this.cantLamina = cantLamina;
}
@Basic
@Column(name = "id_libro")
public Integer getIdLibro() {
return idLibro;
}
public void setIdLibro(Integer idLibro) {
this.idLibro = idLibro;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_tipo_visado", referencedColumnName = "id", nullable = false)
public TipovisadoEntity getTipovisado() {
return tipovisado;
}
public void setTipovisado(TipovisadoEntity tipovisadoByIdTipoVisado) {
this.tipovisado = tipovisadoByIdTipoVisado;
}
}
а также
@Entity
@Table(name = "tipovisado", schema = "lab", catalog = "catastro")
public class TipovisadoEntity {
private long id;
private String abreviacion;
private String nombre;
private Integer orden;
private Collection<PLibroVisadoEntity> libroVisados;
@Id
@Column(name = "id")
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
@Basic
@Column(name = "abreviacion")
public String getAbreviacion() {
return abreviacion;
}
public void setAbreviacion(String abreviacion) {
this.abreviacion = abreviacion;
}
@Basic
@Column(name = "nombre")
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
@Basic
@Column(name = "orden")
public Integer getOrden() {
return orden;
}
public void setOrden(Integer orden) {
this.orden = orden;
}
@OneToMany(mappedBy = "tipovisado")
public Collection<PLibroVisadoEntity> getpLibroVisados() {
return libroVisados;
}
public void setpLibroVisados(Collection<PLibroVisadoEntity> pLibroVisadosById) {
this.libroVisados = pLibroVisadosById;
}
}
И мой запрос:
QPLibroVisadoEntity e = QPLibroVisadoEntity.pLibroVisadoEntity;
QTipovisadoEntity t = QTipovisadoEntity.tipovisadoEntity;
JPAQuery<?> query = factory.query();
return query.select( Projections.bean(PLibroVisadoEntity.class, e.tipovisado, e.idLibro,
Projections.bean(TipovisadoEntity.class, e.tipovisado.nombre)
)).from(e).fetch().stream();
Но это, бросает исключение:
Это исключение:
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 3.319 sec <<< FAILURE!
testFindAll(ar.gov.sf.commons.repository.JpaAsyncRepositoryTest) Time elapsed: 2.673 sec <<< FAILURE!
java.lang.IllegalArgumentException: Unsupported expression new TipovisadoEntity(pLibroVisadoEntity.tipovisado.nombre)
at com.querydsl.core.types.QBean.createBindings(QBean.java:75)
at com.querydsl.core.types.QBean.<init>(QBean.java:129)
at com.querydsl.core.types.QBean.<init>(QBean.java:118)
at com.querydsl.core.types.Projections.bean(Projections.java:68)
at ar.gov.sf.commons.repository.JpaAsyncRepository.findAll(JpaAsyncRepository.java:112)
at ar.gov.sf.commons.repository.JpaAsyncRepositoryTest.testFindAll(JpaAsyncRepositoryTest.java:48)
Есть идеи, как исправить этот код?
Спасибо!!!