Hibernate使用额外的列过滤manyToMany

时间:2016-03-28 15:45:21

标签: hibernate filter many-to-many

我在过滤多种关系时遇到问题。我的课程就像下一个例子一样发展:

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;
    }

}

0 个答案:

没有答案