2014-10-01 2 views
0

Рассмотрим модель, как это:Hibernate JPA: JoinTable с отличительным колонке

Author 
+ List<Books> popularBooks; 
+ List<Books> unknownBooks; 

Book 
+ String name; 

Могу ли я определить @JoinTable использовать отличительную колонку для обоих popularBooks и unknownBooks, так что я могу использовать отличительную столбец вместо двух таблиц? Например таблицы, как это:

author_to_book 
+ author_id 
+ book_id 
+ is_popular 

То, что я хотел бы добиться того, что когда-то я положил книгу в popularBooks, Hibernate бы установить is_popular в действительности.

ответ

0

Вы должны сделать это вручную, установив поле isPopular на true, когда вы добавите Book в список popularBooks. Например:

Создайте поле isPopular в объекте Book.

Публичный класс Книга { ... boolean isPopular; }

Создать методы говорят addPopularBook(Book book) и addUnknownBook(Book book) в вашем Author сущности, как это:

public void addPopularBook(Book book){ 
book.isPopular(true); 
this.popularBooks.add(book); 
} 

public void addUnknownBook(Book book){ 
book.isPopular(false); // This field is false by default, so no need to add this line. 
this.unknownBooks.add(book); 
} 

Теперь, когда вы добавляете книги Author затем вызывать эти методы, так что все книги внутри popularBooks будет иметь свойству isPopular набор до true, где все unknownBooks будет иметь isPopular, установленное на false.

Update:

На основе замечаний я понимаю, что вам нужно много-ко-многим и объединение таблицы должны иметь дополнительный столбец с именем isPopular, вы можете по этой ссылке, чтобы понять, как вы можете достичь что.

http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/

+0

Хорошо, мой плохой, на самом деле я хотел бы иметь M: N отношения, поэтому одна книга может принадлежать нескольким авторам, но не должны быть популярным для всех из них. Это означает, что книга не может иметь поле «популярное», как я сказал в схеме. –

+0

, поэтому у вас есть отношения «многие ко многим» с таблицей JOIN. Книга является сущностью, и она может быть популярной или неизвестной за раз, поэтому это свойство должно войти в таблицу «Книга». Вы хотите сохранить популярность в таблице JOIN? то в этом случае вам нужно добавить новый столбец для таблицы JOIN, и снова вам нужно сделать это вручную, указав, какое значение вы хотите установить для этого свойства. В любом случае вы должны сделать это вручную самостоятельно. – Chaitanya

+0

Да, я хочу иметь его в таблице соединений точно так, как я показал в схеме. Я хочу знать, сможет ли Hibernate обрабатывать этот столбец точно так же, как он способен обрабатывать столбец @OrderBy. –

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