2016-11-15 9 views
0

Мой вопрос:Почему @OneToMany аннотаций не работает

Я хочу сохранить store_id и BOOK_ID В инвентаре таблице, но почему не store_id магазин в таблице Inventory? Я новичок в 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 Главная

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; 

ли Вы действительно нуждаетесь в таблице Inventory ?

+0

спасибо за ваше предложение, но ваше предложение не работает в моем случае, у меня есть три класса Book, Inventory And Store. Я сохраняю только Книгу, чтобы время хотело хранить все данные с соответствующей таблицей + Таблица инвентаря с Book_ID и Store_ID. Я попробовал @manyToOne в классе Store с отображением, но он не работает – prashant

0

Вы выбрали неверную колонку для отношений; Вы аннотированный Id из Store сущности быть столбца присоединиться, вы не указали обратное соотношение в другой стороне, я предпочитаю, чтобы обеспечить 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. Я сохраняю только Книгу, чтобы время хотело хранить все данные с соответствующей таблицей + Таблица инвентаря с Book_ID и Store_ID. Я попробовал @manyToOne в Store Class с mappedBy = магазины, но он не работает. – prashant

+0

Приветствую вас, но, как вы спросили: почему @OneToMany аннотация не работает? Вот почему я объяснил только ее часть, конечно, вы должны исправить взаимно однозначные отношения между «Книгой» и «Объекты инвентаризации» и вывести книгу в «Инвентарь» – jfun

0

Prashant у делают неправильные Thats отображения почему ур запрос не обжигали правильно и данные не вставляя в Inventory Table.So пожалуйста Поправьте ур отображение.

Смежные вопросы