2014-09-29 67 views
1

我運行的春天JPA項目,我有以下含@ManyToOne關係類:JPA @ManyToOne創建複合主鍵代替@id

package ba.fit.vms.pojo; 

    import java.io.Serializable; 
    import java.util.Date; 

    import javax.persistence.CascadeType; 
    import javax.persistence.Column; 
    import javax.persistence.Entity; 
    import javax.persistence.FetchType; 
    import javax.persistence.GeneratedValue; 
    import javax.persistence.GenerationType; 
    import javax.persistence.Id; 
    import javax.persistence.JoinColumn; 
    import javax.persistence.ManyToOne; 
    import javax.persistence.Table; 
    import javax.validation.constraints.NotNull; 

    import org.springframework.format.annotation.DateTimeFormat; 

    @Entity 
    @Table(name="korisnik_vozilo") 
    public class KorisnikVozilo implements Serializable{ 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 1L; 

     @Id 
     @GeneratedValue(strategy=GenerationType.AUTO) 
     @Column(name="id") 
     private Long id; 

     @ManyToOne(cascade = {CascadeType.REFRESH}, fetch=FetchType.EAGER) 
     @JoinColumn(nullable=false, updatable=false) 
     private Vozilo vozilo; 

     @ManyToOne(cascade = {CascadeType.REFRESH}, fetch=FetchType.EAGER) 
     @JoinColumn(nullable=false, updatable=false) 
     private Korisnik korisnik; 

     @Column(name = "dodijeljeno") 
     @DateTimeFormat(pattern = "yyyy-MM-dd") 
     @NotNull 
     private Date dodijeljeno; 

     @Column(name = "vraceno") 
     @DateTimeFormat(pattern = "yyyy-MM-dd") 
     private Date vraceno; 

     ... 

    } 

出於某種原因,啓動服務器,此代碼創建複合主鍵(korisnik_id,vozilo_vin),而不是@Id定義的主鍵。下面是該表的截圖:table view 有人可以向我解釋我做錯了什麼以及如何編寫此代碼,所以我沒有在數據庫中獲得這個組合鍵,而是在該類中定義了這個組合鍵。

它甚至在korisnik_id上設置自動增量!

+0

offtopic評論:一般好的做法是沒有命名字段和類添加到你的母語 – Bozho 2014-09-29 10:49:59

+0

什麼是你的JPA實現/ – Bozho 2014-09-29 10:51:37

+0

我使用Spring STS來實現Spring數據JPA ** ** hibenate mysql的 – Blejzer 2014-09-29 10:54:58

回答

0

您可能會檢查如何使用@JoinColumn來解決您的問題。

+0

任何鏈接或建議? – Blejzer 2014-09-29 11:27:17

+0

http://viralpatel.net/blogs/hibernate-one-to-many-annotation-tutorial/檢查這也hibernate參考解釋所有註釋與例子很好http://docs.jboss.org/hibernate/orm/ 4.3/manual/zh-CN/html/ch07.html#example.collection.mapping.annotations – varun 2014-09-29 11:29:51

1

試着擺脫updatable=false。不可升級的,這兩列可能被視爲實體的不可變身份。

+0

刪除它,刪除表,保存類並重新啓動服務器。不幸的是,結果相同。 – Blejzer 2014-09-29 12:03:11