2011-04-06 87 views
1
@Entity 
@Table 
public class Book { 

    @Id @GeneratedValue @Column private Long bookId; 

    @Column private String name; 

    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER) 
    @JoinColumn(name="bookId") 
    private List<Chapter> chapters=new ArrayList<Chapter>(); 
..... 

@Entity 
@Table 
public class Chapter { 

    @Id @Column @GeneratedValue 
    private Long cid; 

    @Column private String name; 

    @Column private Long bookId; 
.... 

我應該在Chapter.bookId使用什麼註釋指Book.bookId,所以當插入的新書chapter.bookid將採取Book.bookId的生成值。單向一個一對多的關係,而不連接表

Book bk=new Book(); 
    bk.setName("b1"); 

    Chapter ch=new Chapter(); 
    ch.setName("b1c1"); 
    bk.getChapters().add(ch); 

我得到這個錯誤 休眠:插入書(名稱)值 休眠(?):插入章(BOOKID,姓名)值 19(?,?):56:59094 ERROR JDBCExceptionReporter: 234 - 列「BOOKID」不能爲空

回答

6

你不得不自己設置Chapter.bookId或更改BookLongChapgter參考,添加@ManyToOne註釋和手動設置的參考書籍。

在這種情況下,關係的擁有方實際上是Chapter,即一章定義了它屬於哪本書。

+0

是。在這種情況下,大多數人會在Book上添加一個方便的方法(稱爲addChapter或其他一些方法),該方法將章節添加到集合並設置章節的書籍參考。 – codelark 2011-04-06 15:01:27

0

使用@Column(可爲空=真),如果你真的需要空值,否則,如已經在前面的回答有人說 - 你需要手動設置,添加章列表中不設置BOOKID

相關問題