JPA ManyToMany ограничения - PullRequest
       5

JPA ManyToMany ограничения

2 голосов
/ 20 ноября 2010

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

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

У меня есть объект User, объект голосования и объект Product.

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

1 Ответ

1 голос
/ 20 ноября 2010

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

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

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

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

Map<User,Vote> votesOnThisProduct;

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

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

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

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

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

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