没有连接表的单向一对多关系

时间:2011-04-06 14:30:54

标签: java hibernate

@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);

我收到此错误     Hibernate:插入Book(名称)值(?)     Hibernate:插入章节(bookId,name)值(?,?)     19:56:59,094 ERROR JDBCExceptionReporter:234 - 列'bookId'不能为空

2 个答案:

答案 0 :(得分:6)

您必须自己设置Chapter.bookId或将Chapgter中的引用从Long更改为Book,添加@ManyToOne注释并设置参考手动到书上。

在这种情况下,关系的拥有方实际上是Chapter,即章节定义了它所属的书。

答案 1 :(得分:0)

如果你真的需要空值,请使用@Column(nullable = true),否则如前面的答案所述 - 你需要手动设置,添加章节列表不设置bookId