0

次のように2つのテーブルがあります。

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は2つの列を持っています.1つはfromともうCONVERSION1つはfromです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();

affiliateIDabcのすべての変換を取得する方法がわかりません。

何か考えがあれば教えてください。

コンバージョンは、3 番目のテーブルPURCHASEを通じて取得する必要があります。

4

1 に答える 1

0

私があなたのスキーマを理解している方法では、購入は単なる結合テーブルではなく、それ自体がエンティティであるようです。したがって、購入のエンティティを作成し、関連エンティティとの適切な関係を作成します。一般的な結合テーブルには、関連するテーブルを指す少なくとも 2 つの外部キーがあります。代理主キーまたは複合主キー (両方の外部キーの組み合わせで作成) を持つ場合があります。購入には主キー (おそらくサロゲート) と外部キーである別の列があるため、購入をエンティティとしてモデル化することをお勧めします

于 2013-10-30T11:56:04.747 に答える