Я использую Hibernate/JPA и QueryDSL. У меня есть эти таблицы в моей базе данных:Изменить тип выборки во время выполнения отношений @ManyToMany Hibernate
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
(так как это EAGER выборки):
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
, и как мне настроить его для получения желаемого поведения.
Заранее спасибо.