我在过滤多种关系时遇到问题。我的课程就像下一个例子一样发展:
http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/
“我想要一个特定'Locutorio'的'Pagadoras'。'Pagadoras'必须'operativa'等于1,并且'Locutorio'和'Pagador'之间关系的”可见“字段必须等于1"
此外,我必须检查'Pagador.id'是否存在于其他实体'Sucursal'中,它与Many PoOne和'Pagador'有关。
我不知道获取此信息的最佳方式是哪种。我尝试过:过滤器,标准和指示查询。但这是不可能的。
如果我使用直接查询(“来自LocutorioPagador内部加入Locutorio ....”),对LocutorioPagador的强制转换失败。
如果我想通过id获取我想要的Locutorio,然后我尝试将过滤器应用到Pagadoras并使用Locutorio.getPagadoras获取它,它失败了因为我无法过滤Pagador因为查询只进行了连接在LocutorioPagador和Locutorio之间。
如果我使用标准,问题是LocutorioPagador不会与Locagoror一起加入Pagador。
我已经看过很多过滤器的例子但没有这种关系的例子(很多人都有额外的列:oneToMany with mapped和manyToOne)并尝试过滤关系中的字段和来自两个关联实体的字段。
任何人都可以帮助我吗?我想使用过滤器,但我听到任何解决方案。
提前谢谢。
(抱歉我的英文)
我的代码。
package com.precios.entity.view.test;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "TBL_LOCUTORIO")
public class Locutorio implements java.io.Serializable
{
private static final long serialVersionUID = 3803114774434200256L;
private int id;
private Integer idPais;
private int estado;;
private Set<LocutorioPagador> locutorioPagadoras = new HashSet<LocutorioPagador>(0);
public Locutorio()
{
}
public Locutorio(int id, Integer idPais, int estado)
{
this.id = id;
this.idPais = idPais;
this.estado = estado;
}
public Locutorio(int id, Integer idPais, int estado, Set<LocutorioPagador> locutorioPagadoras)
{
super();
this.id = id;
this.idPais = idPais;
this.estado = estado;
this.locutorioPagadoras = locutorioPagadoras;
}
@Id
@Column(name = "Id", nullable = false)
public int getId()
{
return this.id;
}
public void setId(int id)
{
this.id = id;
}
@Column(name = "Id_Pais")
public Integer getIdPais()
{
return this.idPais;
}
public void setIdPais(Integer idPais)
{
this.idPais = idPais;
}
@Column(name = "Estado", nullable = false)
public int getEstado()
{
return this.estado;
}
public void setEstado(int estado)
{
this.estado = estado;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.locutorio", cascade=CascadeType.ALL)
public Set<LocutorioPagador> getLocutorioPagadoras() {
return this.locutorioPagadoras;
}
public void setLocutorioPagadoras(Set<LocutorioPagador> locutorioPagadoras)
{
this.locutorioPagadoras = locutorioPagadoras;
}
}
package com.precios.entity.view.test;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "TBL_PAGADOR")
public class Pagador implements java.io.Serializable
{
private static final long serialVersionUID = -8386483901842298844L;
private int id;
private Integer idPais;
private String empresa;
private Integer idMoneda;
private int operativa;
private Set<LocutorioPagador> locutorioPagadoras = new HashSet<LocutorioPagador>(0);
public Pagador()
{
}
public Pagador(int id, Integer idPais, String empresa, Integer idMoneda, int operativa)
{
this.id = id;
this.idPais = idPais;
this.empresa = empresa;
this.idMoneda = idMoneda;
this.operativa = operativa;
}
public Pagador(int id, Integer idPais, String empresa, Integer idMoneda, int operativa, Set<LocutorioPagador> locutorioPagadoras)
{
this.id = id;
this.idPais = idPais;
this.empresa = empresa;
this.idMoneda = idMoneda;
this.operativa = operativa;
this.locutorioPagadoras = locutorioPagadoras;
}
@Id
@Column(name = "Id", nullable = false)
public int getId()
{
return this.id;
}
public void setId(int id)
{
this.id = id;
}
@Column(name = "Id_Pais")
public Integer getIdPais()
{
return this.idPais;
}
public void setIdPais(Integer idPais)
{
this.idPais = idPais;
}
@Column(name = "Empresa", length = 150)
public String getEmpresa()
{
return this.empresa;
}
public void setEmpresa(String empresa)
{
this.empresa = empresa;
}
@Column(name = "Id_Moneda")
public Integer getIdMoneda()
{
return this.idMoneda;
}
public void setIdMoneda(Integer idMoneda)
{
this.idMoneda = idMoneda;
}
@Column(name = "Operativa", nullable = false)
public int getOperativa()
{
return this.operativa;
}
public void setOperativa(int operativa)
{
this.operativa = operativa;
}
@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.pagador")
public Set<LocutorioPagador> getLocutorioPagadoras() {
return this.locutorioPagadoras;
}
public void setLocutorioPagadoras(Set<LocutorioPagador> locutorioPagadoras) {
this.locutorioPagadoras = locutorioPagadoras;
}
}
package com.precios.entity.view.test;
import javax.persistence.AssociationOverride;
import javax.persistence.AssociationOverrides;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Table;
import javax.persistence.Transient;
@Entity
@Table(name = "TBL_REL_LOCUTORIO_PAGADOR")
@AssociationOverrides({
@AssociationOverride(name = "pk.locutorio",
joinColumns = @JoinColumn(name = "IdLocutorio")),
@AssociationOverride(name = "pk.pagador",
joinColumns = @JoinColumn(name = "IdPagador")) })
public class LocutorioPagador implements java.io.Serializable
{
private static final long serialVersionUID = 1414926985992376395L;
private LocutorioPagadorId pk = new LocutorioPagadorId();
private int visible;
public LocutorioPagador()
{
}
@EmbeddedId
public LocutorioPagadorId getPk() {
return pk;
}
public void setPk(LocutorioPagadorId pk) {
this.pk = pk;
}
@Transient
public Locutorio getLocutorio() {
return getPk().getLocutorio();
}
public void setLocutorio(Locutorio locutorio) {
getPk().setLocutorio(locutorio);
}
@Transient
public Pagador getPagador() {
return getPk().getPagador();
}
public void setPagador(Pagador pagador) {
getPk().setPagador(pagador);
}
@Column(name = "Visible", nullable = false)
public int getVisible()
{
return this.visible;
}
public void setVisible(int visible)
{
this.visible = visible;
}
public boolean equals(Object other)
{
if (this == other)
return true;
if (other == null || getClass() != other.getClass())
return false;
LocutorioPagador that = (LocutorioPagador) other;
if (getPk() != null ? !getPk().equals(that.getPk())
: that.getPk() != null)
return false;
return true;
}
public int hashCode()
{
return (getPk() == null ? 0 : getPk().hashCode());
}
}
package com.precios.entity.view.test;
import javax.persistence.Embeddable;
import javax.persistence.ManyToOne;
@Embeddable
public class LocutorioPagadorId implements java.io.Serializable {
private static final long serialVersionUID = 1962350834544505635L;
private Locutorio locutorio;
private Pagador pagador;
@ManyToOne
public Locutorio getLocutorio() {
return locutorio;
}
public void setLocutorio(Locutorio locutorio) {
this.locutorio = locutorio;
}
@ManyToOne
public Pagador getPagador() {
return pagador;
}
public void setPagador(Pagador pagador) {
this.pagador = pagador;
}
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
LocutorioPagadorId that = (LocutorioPagadorId) o;
if (locutorio != null ? !locutorio.equals(that.locutorio) : that.locutorio != null) return false;
if (pagador != null ? !pagador.equals(that.pagador) : that.pagador != null)
return false;
return true;
}
public int hashCode() {
int result;
result = (locutorio != null ? locutorio.hashCode() : 0);
result = 31 * result + (pagador != null ? pagador.hashCode() : 0);
return result;
}
}