однонаправленное отношение «один ко многим» без таблицы соединений - PullRequest
1 голос
/ 06 апреля 2011
@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 ОШИБКА JDBCExceptionReporter: 234 - Столбец 'bookId' не может быть пустым

Ответы [ 2 ]

6 голосов
/ 06 апреля 2011

Вы должны установить Chapter.bookId самостоятельно или изменить ссылку в Chapgter с Long на Book, добавить аннотацию @ManyToOne и установить ссылку на книгу вручную.

В этом случае владельцем является отношение Chapter, т. Е. Глава определяет, к какой книге оно принадлежит.

0 голосов
/ 06 апреля 2011

Используйте @Column (nullable = true), если вам действительно нужно нулевое значение, в противном случае, как было сказано в предыдущем ответе - вам нужно установить его вручную, добавление главы в список не устанавливает bookId

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...