2017-03-23 22 views
1

を休止状態これは私のmysql dbは、複合キーマッピング外部キー問題

user.java

@Entity 
@Table(name="user") 

public class user 
{ 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 

    private int uid; 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy ="user") 
    private Set<order> orders = new HashSet<order>(); 
    // 
    setter ,getter ,and other 
} 

order.java

@Entity 
@Table(name="`order`") 
public class order 
{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int oid; 

    @OneToMany(cascade = CascadeType.ALL) 
    @JoinColumn(name="oid", referencedColumnName="oid") 
    private Set<orderitem> orderitems = new HashSet<orderitem>(); 

    @ManyToOne(cascade=CascadeType.ALL) 
    @JoinColumn(name="uid") 
    private user user ; 

    ///// 
    setter ,getter and other 

} 

orderitem.java

@Entity 
@Table(name="orderitem") 
public class orderitem 
{ 
    @EmbeddedId 
    private orderitem_PK PK; //composite key 

    @ManyToOne 
    @JoinColumn(name="oid", referencedColumnName="oid" ,insertable = false, updatable = false) 
    private order order; 

    @ManyToOne 
    @JoinColumn(name="pid", referencedColumnName="pid", insertable = false, updatable = false) 
    private product products ; 

    //// 
    setter,getter and other 
} 

orderitem_PKです。 Java

@Embeddable 
public class orderitem_PK implements Serializable 
{ 

    private int oid; 
    private int pid; 
    public orderitem_PK() {} 

    public orderitem_PK(int oid, int pid) { 
     this.oid = oid; 
     this.pid = pid; 
    } 

    // equals, hashCode 

    @Override 
    public boolean equals(Object obj) { 
     // TODO Auto-generated method stub 
     return super.equals(obj); 
    } 

    @Override 
    public int hashCode() { 
     // TODO Auto-generated method stub 
     return super.hashCode(); 
    } 

と最後product.java

@Entity 
@Table(name="product") 
public class product 
{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private int pid; 

    @OneToMany(cascade = CascadeType.ALL) 
    @JoinColumn(name="pid", referencedColumnName="pid") 
    private Set<orderitem> orderitems = new HashSet<orderitem>(); 

    ////////// 
     setter,getter and other 

} 

それは私がこのコード

   order order = new order(); 
      order.setUser(user); 
      order.setOrdertotal(product.getPrice()); 

      Date dt = new Date(); 
      DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      String nowTime = df.format(dt); 
      java.sql.Timestamp buydate = java.sql.Timestamp.valueOf(nowTime); 

      order.setOrderdate(buydate); 

      /// delete this part will work 
      orderitem orderitem = new orderitem(); 
      orderitem.setOrder(order); 
      orderitem.setProducts(product); 
      orderitem.setQuantity(product.getQuantity()); 
      orderitem.setPrice(product.getPrice()); 

      //// 

      session.save(order); 
      session.save(orderitem); 

出会い何らかのエラーによってデータを挿入しようとしているオンラインショッピングのページ

です。

org.hibernate.id.IdentifierGenerationException:私はコードのみが仕事であるユーザーと注文の部分を保存するときに、クラスModel.orderitem

:ヌルIDの生成。

オーダーアイテムコードを保存した後、問題が発生しました。

私は複合キーマッピングの外部キーが間違っていると思います。

しかし、私はそれを修正する方法がわかりません。

誰かが私が間違っていることを見つけることができますか?

ありがとうございました。

答えて

0

@MapsIdを使用して、埋め込みIDにoidとpidの両方をマップする必要があります。 @MasIdは、EmbeddedIdの主キーまたは親エンティティの単純な主キーのマッピングを提供します。 orderItemエンティティで以下の変更を行います。

@Entity 
@Table(name="orderitem") 
public class orderitem 
{ 
    @EmbeddedId 
    private orderitem_PK PK; //composite key 

    @ManyToOne 
    @MapsId("oid") // maps the order id attribute of embedded id 
    @JoinColumn(name="oid", referencedColumnName="oid" ,insertable = false, updatable = false) 
    private order order; 

    @ManyToOne 
    @MapsId("pid") // maps the product id attribute of embedded id 
    @JoinColumn(name="pid", referencedColumnName="pid", insertable = false, updatable = false) 
    private product products ; 

    //// 
    setter,getter and other 
} 
+0

おかげではなく、「反射による[9]の値フィールドの値を設定できませんでした:[クラスModel.orderitem_PK.oid] Model.orderitem_PK.oidのセッター」私はあなたの方法を試してみて、それでもoccurre問題は、値を[ ]私が試行するたびに蓄積されます、それは奇妙です – alan14alan

+0

@ mapsIdを使用してこれらのフィールドを設定する場合は、orderitem_PKでgetterとsetterのoidとpidを持つ必要があります。 – shubham

+0

私はgetitterとsetterをorderitem_PKに持っています。 – alan14alan