为休眠JoinTable添加额外的属性

时间:2011-01-20 19:56:55

标签: hibernate orm

我有两个实体,Message和User。用户与Message有一个ManyToMany关系(用户可以有很多消息)和Message(现在,为了使它不那么复杂)与User有一个ManyToMany关系(一条消息可以发送给多个用户)。

我正在使用@JoinTable加入这两个实体,但是,我想在连接表中添加一个“status”列来判断该消息是否是新的,读取等。我正在考虑将列放入但是,消息实体,我认为这可能是不可能的。

我已经看到很多关于这个问题的答案说要使用中间实体,但我想尽可能避免这种情况。

有没有人可以解决我的问题?

1 个答案:

答案 0 :(得分:4)

JPA 2.0(即Hibernate 3.5及更高版本)引入了对三元关系建模的支持Map。例如,您可以执行类似的操作(但如果您需要双向关系,我不确定如何处理另一方):

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>();

    ...
}