2016-11-15 32 views
0

我的問題:爲什麼@OneToMany批註不工作

我想存儲STORE_ID和BOOK_ID庫存表,但爲什麼不STORE_ID店在庫存表?我是JPA中的新成員,請向我建議我爲存儲STORE_ID在INVENTORY表中做什麼。

1.Book

@Entity 
@Table(name="book") 
public class Book implements Serializable { 
    @Id 
    @Column(name="book_id") 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 
    private String isbn; 
    private String title; 
    private Date publishedOn; 
    private Double price; 
    private int version = -1; 

    @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="book") 
    Inventory inventoryRecords = new Inventory(); 

2.Inventory

@Entity 
@Table(name="inventory") 
public class Inventory implements Serializable { 
    /** 
    * 
    */ 
    @Id 
    @Column(name="INVENTORY_ID") 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 

    @OneToOne 
    @JoinColumn(name="book_id") 
    private Book book; 

    @OneToMany(cascade=CascadeType.ALL) 
    @JoinColumn(name="STORE_ID") 
    private Set<Store> stores = new HashSet<Store>(); 

    private Integer quantity; 

3.Store

@Entity 
@Table(name="store") 
public class Store implements Serializable { 
    @Id 
    @Column(name="STORE_ID")  
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private Long id; 
    @Column(name="NickName") 
    private String nickName; 

4.In Main

Book b = new Book(); 
     b.setTitle("abc"); 
     b.setIsbn("abc"); 

    Inventory i = new Inventory();  
     i.setBook(b); 
     b.setInventoryRecords(i); 

    Store s = new Store(); 

     s.setNickName("yyynn6"); 
     i.getStores().add(s); 
     entitymanager.persist(b); 

    OUTPUT= 
    Hibernate: insert into book (isbn, price, publishedOn, title, version) values (?, ?, ?, ?, ?) 
    Hibernate: insert into inventory (book_id, quantity) values (?, ?) 
    Hibernate: insert into store (NickName) values (?) 

回答

0

我覺得你在數據庫層面搞砸了。如果商店中有很多書,我會擺脫庫存實體,並做到這一點:

在商店:

@OneToMany(mappedBy="store", cascade=CascadeType.ALL) 
private Set<Book> books= new HashSet<Book>(); 

在書:

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "STORE_ID") 
private Store store; 

你真的需要庫存表?

+0

感謝您的建議,但您的建議不適用於我的情況,我有三類書籍,庫存和商店。我僅persist Book,以便時間將所有數據與相應的表+庫存表與Book_ID和Store_ID一起存儲。我試過@manyToOne在Store Class中映射但不起作用 – prashant

0

您爲關係選擇了錯誤的列;您註釋的Store實體Id是連接列,也沒有指定在另一側的反向關係,我更願意提供的內部存儲一個INVENTORY_ID柱:

在商店:

@ManyToOne 
@JoinColumn(name="INVENTORY_ID") 
private Inventory inventory; 

在庫存:

@OneToMany(mappedBy="inventory",cascade=CascadeType.ALL) 
@JoinColumn(name="INVENTORY_ID") 
private Set<Store> inventories=new HashSet<Store>(); 
+0

感謝您的建議,但您的建議不適用於我的案例,我有三本Book,Inventory And Store類。我僅persist Book,以便時間將所有數據與相應的表+庫存表與Book_ID和Store_ID一起存儲。我已經嘗試使用mappedBy = stores類的Store類中的@manyToOne,但它不起作用。 – prashant

+0

不客氣,但正如你所問_爲什麼@OneToMany註釋不起作用?_這就是爲什麼我只解釋它的一對多的一部分,當然你必須糾正「書」和「書」之間的一對一關係庫存「實體,並將圖書也納入庫存 – jfun

0

PRASHANTü做錯映射這就是爲什麼UR查詢無法正常發射和數據庫存Table.So不插入請更正UR映射。