Добавление дополнительного свойства в hibernate JoinTable - PullRequest
3 голосов
/ 20 января 2011

У меня есть две сущности, Сообщение и Пользователь.Пользователь имеет отношение ManyToMany к сообщению (пользователь может иметь много сообщений), а сообщение (на данный момент, чтобы сделать его менее сложным) имеет отношение ManyToMany к пользователю (сообщение может быть отправлено нескольким пользователям).

Я соединяю две сущности с помощью @JoinTable, однако я хотел бы добавить столбец «status» в таблицу соединений, чтобы сообщить, является ли сообщение новым, прочитанным и т. Д.столбец в сущности сообщения, однако, я думаю, что это, вероятно, невозможно.

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

Есть ли у кого-нибудь возможное решение моей проблемы?

1 Ответ

4 голосов
/ 20 января 2011

JPA 2.0 (т. Е. Hibernate 3.5 и выше) представил поддержку моделирования троичных отношений как Map s.Например, вы можете сделать что-то вроде этого (хотя я не уверен, что делать с другой стороной, если вам нужны двунаправленные отношения):

public enum MessageStatus { READ, UNREAD }

public class User {
    ...

    @ElementCollection
    @CollectionTable(name = "MessagesToUsers", joinColumns = @JoinColumn(name = "userId"))
    @Column(name = "messageStatus")
    @MapKeyJoinColumn(name = "messageId")
    private Map<Message, MessageStatus> messages = new HashMap<Message, MessageStatus>();

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