2015-09-15 4 views
2

Я разрабатываю приложение JavaEE, и я использую JPA/Hibernate как механизм персистентности. При разработке приложения некоторые вопросы были подняты на мой взгляд.JPA/Hibernate ManyToMany vs two-sided OneToMany/ManyToOne

Приложение состоит из пользователей и их ролей в отношениях N: M. Вот подмножество базы данных приведенных выше таблиц.

enter image description here

Я относительно новым для Hibernate и сначала я спросил IntelliJ IDEA для создания отображения для меня. То, что он сделал, было генерировать следующие классы Java:

  • UserEntity.java
  • RoleEntity.java
  • UserXRoleEntity.java
  • UserXRoleEntityPK.java

Таким образом, генерируется отображение для таблица отношений и два отношения 1: N, одна между user и userXrole и одна между role и userXrole.

После некоторых исследований я обнаружил, что, используя @ManyToMany аннотацию, я мог бы опустить отображение userXrole таблицы в классе Java и просто объявить его в аннотации как @JoinTable.

Так что вопрос:

  • Почему IntelliJ генерировать объекты таким образом?

Это просто более общий способ, который помогает генерировать или имеет какие-либо другие преимущества. Вы спорите в пользу того или другого?

ответ

1

Это просто более общий способ, который помогает генерировать или имеет какие-либо другие преимущества.

JPA не знает, является ли таблица просто объединенной таблицей, поэтому вы должны сказать ей (используя @JoinTable). Генератор может догадаться, но он, вероятно, будет генерировать только @ManyToMany, если ваши имена таблиц соответствуют значениям по умолчанию для JPA.

Вы бы высказались в пользу того или иного способа?

Я хотел бы использовать @ManyToMany, если я не есть причина (мельче мелкозернистый контроль над ленивым/нетерпеливый выборки может быть?) Для отдельных объектов отображения, в основном потому, что меньше кода = меньше ошибок.

+0

Спасибо за ответ. Не могли бы вы предоставить какую-либо ссылку на источник, указывающую соглашения об именах баз данных для JPA? – errikos

+0

http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-eval-oth-JSpec/ - для этого случая 2.10.4 (стр. 48 в pdf) – duckstep

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