2010-11-19 3 views
2

Я новичок в JPA, поэтому извиняюсь, если это очень простая проблема.JPA Ограничения ManyToMany

У меня есть приложение, в котором пользователь может проголосовать за продукт (диапазон от 0 до 10), но может голосовать только один раз. Я смущен тем, как многие отношения, установленные в JPA, позволят это.

У меня есть объект User и объект Vote и объект Product.

Пользователь может проголосовать за продукт, но только один раз. У продукта может быть много голосов, от многих пользователей, но только на одного пользователя. Как я могу создать это из аннотации JPA? Я понимаю это явно из дизайна базы данных, а не из JPA.

ответ

1

Поскольку вы используете JPA, который является объектно-реляционным картографом, спроектируйте его так, как если бы JPA и базы данных не были задействованы.

Что я имею в виду, это построить вашу объектную модель (классы Java) таким образом, чтобы это имело смысл для объектов и отношений, которые вы пытаетесь захватить, а затем беспокоиться о правильной настройке JPA вокруг этих объектов.

В прошлый раз, когда я использовал JPA, это было примерно в то время, когда было развернуто 2.0, поэтому я не помню, насколько подробно спецификация поддерживает использование полей, которые являются реализациями java.util.map, но Map будет хороший способ пойти, если он поддерживается.

В частности, в вашем объекте Product вы можете указать поле типа Карта.

Map<User,Vote> votesOnThisProduct; 

Но если честно, то, что чувствует себя наиболее рациональным, когда вы думаете об этом с точки зрения только классов Java, игнорирующих JPA и менталитетов базы данных, это путь.

Другие варианты будут определять дополнительные классы, такие, как

public class ProductVoteRecord 
{ 
    User user; 
    Vote vote; 
    Product product; 
} 

, а затем сделать пользователя и продукта (и, возможно, голосовать) соединение первичного ключа с помощью JPA аннотации.

Но даже класс, подобный этому, демонстрирует признаки отравления реляционным дизайном, поскольку он по существу является столярным столом.

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