2012-09-06 3 views
2

두 명 이상의 사용자간에 비공개 메시지 용 모델을 구현하려고합니다.단방향 매핑과 같은 유형의 일대일 및 일대 다 관리는 어떻게해야합니까?

  • 사용자 사용자 모델은 편집해서는 안
  • PrivateMessage

, 그래서는 단방향 관계를 설정하기 위해 노력하고있어 : 내가 두 엔티티있어 의미

:

@Entity (name = "User") 
@Table (name = "user") 
public class User implements Serializable { 
@Id 
String username; 
String password; 
// something like this ... 
} 

PrivateMessage 모델은 여러 수신자를 주소 지정하며 정확히 o ne 보낸 사람. 그래서 나는 이런 식으로 뭔가가 필요합니다

@Entity (name = "PrivateMessage") 
@Table (name = "privateMessage") 
@XmlRootElement 
@XmlType (propOrder = {"id", "sender", "receivers", 
     "title", "text", "date", "read"}) 
public class PrivateMessage implements Serializable { 

    private static final long serialVersionUID = -9126766942868177246L; 

    @Id 
    @GeneratedValue 
    private Long id; 

    @NotNull 
    private String title; 

    @NotNull 
    private String text; 

    @NotNull 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date date; 

    @NotNull 
    private boolean read; 

    @NotNull 
    @ElementCollection(fetch = FetchType.EAGER, targetClass = User.class) 
    private Set<User> receivers; 

    @NotNull 
    @OneToOne 
    private User sender; 

    // and so on 
} 

따라 'privateMessage'테이블이 생성되지 않으며 PM 및 많은 수신기 사이의 단지 관계를 만족한다. 나는 이것에 대해 혼란스러워합니다. 매번 'mappedBy'속성을 설정하려고하면 IDE에서 오류로 표시합니다.

User-entity가 매핑하는 비공개 메시지를 인식하지 못하는 것 같습니다.

내가 뭘 잘못하고 있니? 이 상황과 비슷한 몇 가지 상황을 해결했지만 그 해결책 중 하나도 여기에서 작동하지 않습니다.

미리 감사드립니다.

필드는 '읽기'의 MySQL의 예약 된 키워드입니다 : http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

그래서 내가 읽지 할 필드를 변경가 지금 테이블이 성공적으로 생성

답변

1

나는 지금 내 문제에 대한 답을 알고 .

또한, PM에 여러 사용자가있을 수 있고 사용자가 여러 PM을 수신 할 수 있기 때문에 PrivateMessage에서 User로 올바른 매핑이 @ManyToMany라고 생각합니다. '보낸 사람'필드는 @OneToOne으로 유지됩니다.

이제 모든 테이블이 성공적으로 생성됩니다. 가장 큰 문제는 예약 된 MySQL 키워드를 사용하여 테이블을 생성하지 못하게한다는 것입니다. 이 문제가 해결되면 매핑의 올바른 구성을 쉽게 파악할 수있었습니다.

관련 문제