向hibernate JoinTable添加附加属性

向hibernate JoinTable添加附加属性,hibernate,orm,Hibernate,Orm,我有两个实体,消息和用户。用户与消息有多个关系(一个用户可以有多个消息),而消息(现在,为了使其不那么复杂)与用户有多个关系(一条消息可以发送给多个用户) 我正在使用@JoinTable连接这两个实体,但是,我想在连接表中添加一个“status”列,以判断消息是否为new、read等。我正在考虑将该列放在消息实体中,但是,我认为这可能是不可能的 我已经看到很多关于这个问题的答案,说使用中介实体,但是如果可能的话,我想避免这样做 有人能为我的问题提供任何可能的解决方案吗?JPA2.0(即Hiber

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

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

我已经看到很多关于这个问题的答案,说使用中介实体,但是如果可能的话,我想避免这样做

有人能为我的问题提供任何可能的解决方案吗?

JPA2.0(即Hibernate 3.5及更高版本)引入了对三元关系建模的支持,如
Map
s。例如,您可以这样做(尽管如果您需要双向关系,我不确定如何处理另一方):

public enum MessageStatus{READ,UNREAD}
公共类用户{
...
@元素集合
@CollectionTable(name=“MessagesToUsers”,joinColumns=@JoinColumn(name=“userId”))
@列(name=“messageStatus”)
@MapKeyJoinColumn(name=“messageId”)
私有映射消息=新HashMap();
...
}

可以在条件查询中使用这种注释方式的字段吗?因为这对我来说并不明显,我还要指出,如果你走这条路线,你现在可以管理关系(即哪些
消息与
用户相关)和通过此映射的额外值。您不会有单独的
集合
字段。例如,如果您想从
用户
中删除
消息
关联,您可以从该映射的键中删除该消息。@axtavt,请帮助查看我的问题:
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>();

    ...
}