私はしばらくの間、この質問の解決策を探していました。この問題の原因となっている多対多の関係について話しているスレッドをいくつか見つけましたが、それが私の状況には当てはまらないと思うので、これを新しいスレッドに投稿します。
次のデータベース設計があります: ========================================= ===================================
ユーザー テーブル: PK USER_ID、USER_NAME UNIQUE、...
item テーブル: PK ITEM_ID、FK ITEM_SELLER -> user.USER_ID との多対 1 関係、FK ITEM_BUYER -> user.USER_ID との多対 1 関係、...
入札テーブル (ユーザーとアイテムの間のブリッジ): PK BID_ID、FK BIDDER_ID -> user.USER_ID との多対 1 関係、FK ITEM_ID -> item.ITEM_ID との多対 1 関係、...
カテゴリ テーブル: PK CAT_ID、...
item_category テーブル (カテゴリとアイテムの間のブリッジ): PK ITEM_CAT_ID、FK ITEM_ID -> item.ITEM_ID との多対 1 の関係、FK CAT_ID -> category.CAT_ID との多対 1 の関係、...
================================================== ============================
NetBeans を介して休止状態を使用してこれを設定しようとしています。hibernate.cfg、reveng、および util ファイルのセットアップ手順を説明したチュートリアルを見つけ、NetBeans ツールを使用して POJO を生成する方法を示しました。チュートリアルでは、cfg ファイルを右クリックして HQL クエリを実行し、すべてが正しく機能していることを確認します。簡単なテーブル (上記のユーザー テーブル) を使用してこのプロセスをテストしたところ、すべてが機能しました。ただし、すべてをまとめようとすると、次のエラーが発生します。
org.hibernate.AnnotationException: A Foreign key refering GavelDB.User from GavelDB.Bid has the wrong number of column. should be 2
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:276)
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:89)
at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:499)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:304)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
前に述べたように、この問題を検索する以前の試みのすべてで複合キーが指摘されましたが、この設計ではそれらを回避するように努力したので、それがどのように問題になるかわかりません. 私は休止状態が初めてなので、ファイルを最初から書き込むための知識ベースはまだありません。誰かが私に洞察を提供できるなら、それは大歓迎です。お早めにどうぞ!
参考までに、エラーに記載されている 2 つのファイルを次に示します。
BID.JAVA
package GavelDB;
// Generated Feb 10, 2011 12:41:04 PM by Hibernate Tools 3.2.1.GA
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
* Bid generated by hbm2java
*/
@Entity
@Table(name="bid"
,catalog="gavel1"
)
public class Bid implements java.io.Serializable {
private Integer bidId;
private User user;
private Item item;
private Date bidDate;
private double bidAmt;
private Double bidMax;
public Bid() {
}
public Bid(User user, Item item, Date bidDate, double bidAmt) {
this.user = user;
this.item = item;
this.bidDate = bidDate;
this.bidAmt = bidAmt;
}
public Bid(User user, Item item, Date bidDate, double bidAmt, Double bidMax) {
this.user = user;
this.item = item;
this.bidDate = bidDate;
this.bidAmt = bidAmt;
this.bidMax = bidMax;
}
@Id @GeneratedValue(strategy=IDENTITY)
@Column(name="BID_ID", unique=true, nullable=false)
public Integer getBidId() {
return this.bidId;
}
public void setBidId(Integer bidId) {
this.bidId = bidId;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="BIDDER_ID", nullable=false)
public User getUser() {
return this.user;
}
public void setUser(User user) {
this.user = user;
}
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ITEM_ID", nullable=false)
public Item getItem() {
return this.item;
}
public void setItem(Item item) {
this.item = item;
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name="BID_DATE", nullable=false, length=19)
public Date getBidDate() {
return this.bidDate;
}
public void setBidDate(Date bidDate) {
this.bidDate = bidDate;
}
@Column(name="BID_AMT", nullable=false, precision=22, scale=0)
public double getBidAmt() {
return this.bidAmt;
}
public void setBidAmt(double bidAmt) {
this.bidAmt = bidAmt;
}
@Column(name="BID_MAX", precision=22, scale=0)
public Double getBidMax() {
return this.bidMax;
}
public void setBidMax(Double bidMax) {
this.bidMax = bidMax;
}
}
ITEM.JAVA
package GavelDB;
// Generated Feb 10, 2011 12:41:04 PM by Hibernate Tools 3.2.1.GA
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.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
/**
* User generated by hbm2java
*/
@Entity
@Table(name="user"
,catalog="gavel1"
, uniqueConstraints = @UniqueConstraint(columnNames="USER_NAME")
)
public class User implements java.io.Serializable {
private Integer userId;
private String userName;
private String pswd;
private String email;
private String street;
private String city;
private String state;
private Integer zip;
private Integer phone;
private Set<Item> itemsForItemSeller = new HashSet<Item>(0);
private Set<Item> itemsForItemBuyer = new HashSet<Item>(0);
private Set<Bid> bids = new HashSet<Bid>(0);
public User() {
}
public User(String userName) {
this.userName = userName;
}
public User(String userName, String pswd, String email, String street, String city, String state, Integer zip, Integer phone, Set<Item> itemsForItemSeller, Set<Item> itemsForItemBuyer, Set<Bid> bids) {
this.userName = userName;
this.pswd = pswd;
this.email = email;
this.street = street;
this.city = city;
this.state = state;
this.zip = zip;
this.phone = phone;
this.itemsForItemSeller = itemsForItemSeller;
this.itemsForItemBuyer = itemsForItemBuyer;
this.bids = bids;
}
@Id @GeneratedValue(strategy=IDENTITY)
@Column(name="USER_ID", unique=true, nullable=false)
public Integer getUserId() {
return this.userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
@Column(name="USER_NAME", unique=true, nullable=false)
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Column(name="PSWD", length=30)
public String getPswd() {
return this.pswd;
}
public void setPswd(String pswd) {
this.pswd = pswd;
}
@Column(name="EMAIL")
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(name="STREET")
public String getStreet() {
return this.street;
}
public void setStreet(String street) {
this.street = street;
}
@Column(name="CITY")
public String getCity() {
return this.city;
}
public void setCity(String city) {
this.city = city;
}
@Column(name="STATE")
public String getState() {
return this.state;
}
public void setState(String state) {
this.state = state;
}
@Column(name="ZIP")
public Integer getZip() {
return this.zip;
}
public void setZip(Integer zip) {
this.zip = zip;
}
@Column(name="PHONE")
public Integer getPhone() {
return this.phone;
}
public void setPhone(Integer phone) {
this.phone = phone;
}
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="userByItemSeller")
public Set<Item> getItemsForItemSeller() {
return this.itemsForItemSeller;
}
public void setItemsForItemSeller(Set<Item> itemsForItemSeller) {
this.itemsForItemSeller = itemsForItemSeller;
}
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="userByItemBuyer")
public Set<Item> getItemsForItemBuyer() {
return this.itemsForItemBuyer;
}
public void setItemsForItemBuyer(Set<Item> itemsForItemBuyer) {
this.itemsForItemBuyer = itemsForItemBuyer;
}
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="user")
public Set<Bid> getBids() {
return this.bids;
}
public void setBids(Set<Bid> bids) {
this.bids = bids;
}
}