Я разрабатываю приложение JavaEE, и я использую JPA/Hibernate как механизм персистентности. При разработке приложения некоторые вопросы были подняты на мой взгляд.JPA/Hibernate ManyToMany vs two-sided OneToMany/ManyToOne
Приложение состоит из пользователей и их ролей в отношениях N: M. Вот подмножество базы данных приведенных выше таблиц.
Я относительно новым для Hibernate и сначала я спросил IntelliJ IDEA для создания отображения для меня. То, что он сделал, было генерировать следующие классы Java:
- UserEntity.java
- RoleEntity.java
- UserXRoleEntity.java
- UserXRoleEntityPK.java
Таким образом, генерируется отображение для таблица отношений и два отношения 1: N, одна между user
и userXrole
и одна между role
и userXrole
.
После некоторых исследований я обнаружил, что, используя @ManyToMany
аннотацию, я мог бы опустить отображение userXrole
таблицы в классе Java и просто объявить его в аннотации как @JoinTable
.
Так что вопрос:
- Почему IntelliJ генерировать объекты таким образом?
Это просто более общий способ, который помогает генерировать или имеет какие-либо другие преимущества. Вы спорите в пользу того или другого?
Спасибо за ответ. Не могли бы вы предоставить какую-либо ссылку на источник, указывающую соглашения об именах баз данных для JPA? – errikos
http://download.oracle.com/otndocs/jcp/persistence-2.0-fr-eval-oth-JSpec/ - для этого случая 2.10.4 (стр. 48 в pdf) – duckstep