2
我正在使用Hibernate/JPA和QueryDSL。我在我的数据库表这样:更改@ManyToMany运行时的获取类型休眠关系
Proveedor
IdProveedor | RazonSocial
Empresa与
IdEmpresa | Nombre
ProveedorEmpresa
IdProveedor | IdEmpresa
Proveedor
和Empresa
之间存在多对多关系。这是我的JPA映射:
PROVEEDOR
@Entity
public class Proveedor {
private String idProveedor;
private String razonSocial;
@IgnoredField
private List<Empresa> empresas;
@Id
@Column(name = "IdProveedor")
public String getIdProveedor() {
return idProveedor;
}
public void setIdProveedor(String idEmpresa) {
this.idProveedor = idEmpresa;
}
@Basic
@Column(name = "RazonSocial")
public String getRazonSocial() {
return razonSocial;
}
public void setRazonSocial(String razonSocial) {
this.razonSocial = razonSocial;
}
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "ProveedorEmpresa", joinColumns = {
@JoinColumn(name = "IdProveedor", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "IdEmpresa", nullable = false, updatable = false)
})
public List<Empresa> getEmpresas() {
return empresas;
}
public void setEmpresas(List<Empresa> empresas) {
this.empresas = empresas;
}
}
EMPRESA
@Entity
public class Empresa {
private String idEmpresa;
private String razonSocial;
private String abreviatura;
private List<Proveedor> proveedores;
@Id
@Column(name = "IdEmpresa")
public String getIdEmpresa() {
return idEmpresa;
}
public void setIdEmpresa(String idEmpresa) {
this.idEmpresa = idEmpresa;
}
@Basic
@Column(name = "RazonSocial")
public String getRazonSocial() {
return razonSocial;
}
public void setRazonSocial(String razonSocial) {
this.razonSocial = razonSocial;
}
@Basic
@Column(name = "Abreviatura")
public String getAbreviatura() {
return abreviatura;
}
public void setAbreviatura(String abreviatura) {
this.abreviatura = abreviatura;
}
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "empresas")
public List<Proveedor> getProveedores() {
return proveedores;
}
public void setProveedores(List<Proveedor> proveedores) {
this.proveedores = proveedores;
}
}
我有这个方法返回所有Empresa
他们Proveedor
(因为急于获取):
public List<Empresa> getEmpresasWithProveedores() {
JPAQuery query = new JPAQuery();
query.from(qEmpresa);
return query.list(qEmpresa);
}
现在,我想返回该其他方法的所有Empresa
没有他们Proveedor
:
public List<Empresa> getEmpresasWithoutProveedores() {
// Set the fetch type to LAZY
JPAQuery query = new JPAQuery();
query.from(qEmpresa);
return query.list(qEmpresa);
}
我已尝试添加一个FetchProfile
在Empresa
实体:
@Entity
@FetchProfile(name = "WITH_PROVEEDORES", fetchOverrides = {
@FetchProfile.FetchOverride(entity = Empresa.class, association = "proveedores", mode = FetchMode.JOIN)})
public class Empresa { . . . }
并启用/停用,然后再每种方法。但它不起作用,它有相同的行为。其实,我不明白FetchProfile
是如何工作的,以及如何配置它以获得我想要的行为。
在此先感谢。