@joinTable oneToMany Relationship

时间:2013-10-30 09:10:07

标签: hibernate join

我有两个表,如下所示:

AFFILIATES
----------
affiliateId (String) (PK)

CONVERSION
-----------
conversionId (Integer) (PK)
purchaseId (Integer) (not null)

PURCHASE
---------
purchaseId (Integer) (PK)
associateId (String) (allow NULL)

实体映射如下:

@Entity
@Table(name="AFFILIATES")
class Affiliate implements Serializable {

    @Id
    @Column(name= "affiliate_id")
    private String affiliateId;

    @OneToMany(mappedBy="affiliate", fetch=FetchType.LAZY)
    private Set<Conversion> conversion;

    public String getAffiliateId() {
        return affiliateId;
    }

    public void setAffiliateId(String affiliateId) {
        this.affiliateId = affiliateId;
    }

    public Set<Conversion> getConversion() {
        return conversion;
    }

    public void setConversion(Set<Conversion> conversion) {
        this.conversion = conversion;
    }

}


@Entity
@Table(name="CONVERSION")
class Conversion implements Serializable{

    @Id
    @Column(name="conversion_id")
    private int conversionId;

    @ManyToOne(optional=true, fetch=FetchType.LAZY)
    private Affiliate affiliate;

    public int getConversionId() {
        return conversionId;
    }

    public void setConversionId(int conversionId) {
        this.conversionId = conversionId;
    }

    public Affiliate getAffiliate() {
        return affiliate;
    }

    public void setAffiliate(Affiliate affiliate) {
        this.affiliate = affiliate;
    }

}

现在我想获取给定affiliateId的所有转换

PURCHASE有两列,一列来自CONVERSION,另一列来自AFFILIATES

尝试关注代码,但无效

String hql = "from Affiliate as a where a.affiliateId = 'abc'";
            Query q = s.createQuery(hql);
            Affiliate a  = (Affiliate) q.uniqueResult();
            System.out.println(a);
            a.getConversion().size();

我不知道如何获得affiliateID abc。

的所有转化

如果您有任何想法,请告诉我。

转换应通过第三个表 PURCHASE

获取

1 个答案:

答案 0 :(得分:0)

我理解你的模式的方式,购买似乎不仅仅是一个连接表而是它本身就是一个实体。因此,创建一个Purchase实体并与关联实体建立适当的关系。典型的连接表至少有两个指向相关表的外键。它可能具有代理主键或复合主键(使用两个外键的组合创建)。由于购买具有主键(最有可能是代理),而另一列是外键,因此最好将购买模型作为实体