0

これに対する解決策を見つけるのに苦労しています。まったく不可能かもしれないと思いますが、ここで試してみます。MyISAM (FK なし) を使用した MySQL 上のレガシー DB スキーマに、次の 2 つのテーブルがあるとします。

TblOrder
ORDERID (INT)    PK
CUSTOMERID (INT) PK
REPID (INT)      PK
ISORDER (INT)    PK
other columns...

TblOrderPos
ORDERID (INT)    PK
POSITIONID (INT) PK
other columns

TblO​​rder が TblOrderPos のセット (ORDERID によって識別される) を持ち、TblOrderPos がプライベート TblOrder インスタンスであることを許可するには、どのような注釈を付ける必要がありますか? 両方のテーブルに EmbeddedId オブジェクトを作成しましたが、@ManyToOne または @OneToMany をオーバーライドして @JoinColumns を使用してプロパティを作成しようとするたびに、Hibernate は PK 列の数が一致しないと不平を言います (うまくいきません)。

誰かがアイデアを持っていることを本当に願っています。

- - - - - -アップデート - - - - - -

TblO​​rder で

@OneToMany(mappedBy="shoporder")
@JoinColumn(name="ORDERID")
public List<Orderposition> getOrderpositions(){
    return this.positions;
}

public void setOrderPositions(List<Orderposition> positions){
    this.positions = positions;
}

TblO​​rderPos で

@ManyToOne
@JoinColumn(name="ORDERID")
public Shoporder getShoporder(){
    return this.shoporder;
}

public void setShoporder(Shoporder order){
    this.shoporder = order;
}

それは私が取得し続けるエラーです: TblOrderPos から TblOrder を参照する外部キーには、間違った数の列があります。4である必要があります

4

2 に答える 2

1

推奨されませんが、composite-id で実行できます。

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html

于 2012-04-11T14:01:48.937 に答える
0

私はそのような構造を使用したので、注釈で可能です。

アノテーションを適切に使用@ManyToOneして、複合 PK を持つテーブルにリンクしていますか? 次のようになります。

@ManyToOne
    @JoinColumns({
        @JoinColumn(name = "WOJ_ID", referencedColumnName = "WOJ_ID"),
        @JoinColumn(name = "POW_NR", referencedColumnName = "POW_NR"),
        })

私は@IdClass注釈を使用しており、複合 PK のクラスを提供しています。いくつかの例は、他の質問への回答に掲載されています: なぜ hibernate の EmbeddedId が機能しないのですか?

于 2012-04-11T14:38:04.760 に答える