2011-01-20 6 views
3

메시지와 사용자라는 두 개의 엔터티가 있습니다. 사용자는 ManyToMany 관계를 Message (사용자가 여러 메시지를 가질 수 있음) 및 Message (지금은 덜 복잡하게 만들 수 있음)가 ManyToMany 관계를 사용자에게가집니다 (메시지를 여러 사용자에게 보낼 수 있음).최대 절전 모드 JoinTable에 추가 속성 추가

@JoinTable을 사용하여 두 엔티티에 합류했습니다. 그러나 메시지가 새로운 것인지, 읽음인지 등을 알리기 위해 조인 테이블에 "상태"열을 추가하고 싶습니다. 그러나 Message 엔티티는 이것이 가능하지 않을 수도 있다고 생각합니다.

중간 엔터티를 사용하는이 질문에 대한 많은 답변을 보았지만 가능한 경우이를 피하고 싶습니다.

누구든지 내 문제에 대한 가능한 해결책이 있습니까?

답변

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

    ... 
} 
+0

이러한 방식으로 주석을 추가 한 필드는 조건 쿼리에 사용될 수 있습니까? –

+0

나에게 분명하지 않기 때문에이 경로를 사용하면 이제는 관계 (즉, '사용자'와 관련된 '메시지')와이 경로를 통한 추가 값 지도. 'Collection '필드는 별도로 존재하지 않습니다. 예를 들어,'User'에서'Message' 연관을 제거하고 싶다면이 맵의 키에서 메시지를 제거하십시오. –

+0

@axtavt, 제 질문 좀 보시기 바랍니다 : http://stackoverflow.com/questions/27916180/add-extra-property-to-intermediary-table-when-mapping-many-to-many-association-w – DerekY