【転】Hbernateの「Repeated column in mapping for entity」が異常です。
4514 ワード
記事のソース:http://www.iteye.com/topic/786535
作者:lijiejava
一対の多双方向関連(クラスItemとクラスBid):Item類:
Bidクラス:
Item.hbm.xml:(tuitem表)
Bid.hbm.xml:(tubid表)
テストコード:
これは以前の一対の多双関連です。今日の運行時は下記の異常を投げました。
マッピングファイルを詳しく調べたら、Item.hbm.xmlプロファイルの「key」要素の中に一つのnot-null=「true」の制限が追加されていることが分かりました。これを取り除いたら正常に動作します。(1)not-null=「true」に加入すると何を意味しますか?「key」要素で定義された列マップitem_idはt_ですbidテーブルの外結合列。not-null="true"に加入すると、t_を増やすという意味です。bidテーブルの記録は、外接キー列item_IDは必ずnullではなく、Item端はitemを確保するためにIDフィールドはnullではありません。(Item端はBid端を知らないので、Bid端に依存してitemyuidを確保することは不可能です。)t_にあります。bidの挿入文には、このフィールドに値が割り当てられます。実は、一方向のペアが多いか、それとも双方向のペアが多いかに関わらず、「key」要素にnot-null=「true」が設定されているなら、t_bid表のinsert文には、column属性で指定された列(ここではitemuid)が追加されます。IDは空にならない一方向の一対のマルチ関連を例にとって、not-null="true"が設定されていない場合、出力される語句は、Hbernate:insert into t_bid(amount)values(?);not-null=「true」を設定したら、出力する語句はハイビスカス:insert into_bid(amount、itemuuid)values(?)。(2)異常な原因を打ち出す?異常の原因は、異常情報からフィールドが重複していることが分かります。(1)の分析によって、その原因がよく分かります。Bid.hbm.xmlマッピングファイルを参照してください。これは複数のペアの関連であり、not-null="true"Bidがそのエンティティに対応していることを示しています。column属性指定t_bid表中item_id列はt_ですitem表のメインキーの外形キーです。Bidにとって、not-null=「true」が指定されていても、そのinsert文はitem(u)となります。IDフィールドの値は、nullでも与えられます。これが異常発生の原因であり、このような設定はハイビスカスにinsert into t_を発生させます。bit(itemuuid、itemuuid)values(•••)の文なので、重複フィールドの異常を提示します。(3)解決:1.要素の中のnot-null="true"を削除し、実際には双方向の関連においてItem側から外殻キー列item(u)を確保する必要はありません。idはnullではない2.ヒントに従い、Bid.hbm.xmlマッピングファイルにinsert=「false」udate=「false」を追加することができます。この二つの制限を加えると、t_に対して意味があります。bidテーブルのinsertとudateの操作にはこのフィールドが含まれていないので、重複を避けることができます。3.Item.hbm.xmlの「set」要素にinverse=「true」を入れて、関連関係を全部Bid端に渡す。http://lijiejava.iteye.com/blog/7765874.最もつまらない方法:「key」要素の中のcolumn値をitem_に変更する。id_1等、アイテムとはIDが重複すると、データテーブルフィールドの冗長性が発生しますので、使用してはいけません。実際の応用では、「key」にnot-null=「true」の制限を加えるべきではない。
====================================================================================================================
この問題はXMLと注釈を書く時に会ったことがありますか?しかも非常に頻繁です。
この招待状を通して、データベースの外部キーが空であることも再度説明しました。
以下はデータベースの外部キーに関するいくつかのスレッドです。
http://topic.csdn.net/u/20070525/00/523a0ee7-6d80-404d-ab70-fdd4920b9c45.html
http://blog.csdn.net/wkupaochuan/article/details/7633173
http://gwj41.iteye.com/blog/643467
作者:lijiejava
一対の多双方向関連(クラスItemとクラスBid):Item類:
public class Item {
private int id;
private String name;
private Set bids = new HashSet();
,,,
}
Bidクラス:
public class Bid {
private int id;
private double amount;
private Item item;
...
}
Item.hbm.xml:(tuitem表)
<hibernate-mapping>
•••
<set name="bids" table="t_bid" cascade="save-update">
<key column="item_id" not-null="true"/>
<one-to-many class="value.Bid"/>
</set>
•••
</hibernate-mapping>
Bid.hbm.xml:(tubid表)
<hibernate-mapping>
•••
<many-to-one name="item" class="value.Item" column="item_id" not-null="true" />
•••
</hibernate-mapping>
テストコード:
•••
Item item = new Item();
item.setName("item");
Bid b1 = new Bid();
b1.setAmount(12.09);
b1.setItem(item);
Bid b2 = new Bid();
b2.setAmount(11.98);
b2.setItem(item);
Set bids = new HashSet();
bids.add(b1);
bids.add(b2);
item.setBids(bids);
session.beginTransaction();
session.save(item);
session.getTransaction().commit();
これは以前の一対の多双関連です。今日の運行時は下記の異常を投げました。
Exception in thread "main" java.lang.ExceptionInInitializerError
•••
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: value.Bid column: item_id (should be mapped with insert="false" update="false")
マッピングファイルを詳しく調べたら、Item.hbm.xmlプロファイルの「key」要素の中に一つのnot-null=「true」の制限が追加されていることが分かりました。これを取り除いたら正常に動作します。(1)not-null=「true」に加入すると何を意味しますか?「key」要素で定義された列マップitem_idはt_ですbidテーブルの外結合列。not-null="true"に加入すると、t_を増やすという意味です。bidテーブルの記録は、外接キー列item_IDは必ずnullではなく、Item端はitemを確保するためにIDフィールドはnullではありません。(Item端はBid端を知らないので、Bid端に依存してitemyuidを確保することは不可能です。)t_にあります。bidの挿入文には、このフィールドに値が割り当てられます。実は、一方向のペアが多いか、それとも双方向のペアが多いかに関わらず、「key」要素にnot-null=「true」が設定されているなら、t_bid表のinsert文には、column属性で指定された列(ここではitemuid)が追加されます。IDは空にならない一方向の一対のマルチ関連を例にとって、not-null="true"が設定されていない場合、出力される語句は、Hbernate:insert into t_bid(amount)values(?);not-null=「true」を設定したら、出力する語句はハイビスカス:insert into_bid(amount、itemuuid)values(?)。(2)異常な原因を打ち出す?異常の原因は、異常情報からフィールドが重複していることが分かります。(1)の分析によって、その原因がよく分かります。Bid.hbm.xmlマッピングファイルを参照してください。
====================================================================================================================
この問題はXMLと注釈を書く時に会ったことがありますか?しかも非常に頻繁です。
この招待状を通して、データベースの外部キーが空であることも再度説明しました。
以下はデータベースの外部キーに関するいくつかのスレッドです。
http://topic.csdn.net/u/20070525/00/523a0ee7-6d80-404d-ab70-fdd4920b9c45.html
http://blog.csdn.net/wkupaochuan/article/details/7633173
http://gwj41.iteye.com/blog/643467