2016-06-16 1 views
0

저는 Java에 대해 잘 알고 있으며 현재 ChatProgramm에서 작업 중입니다. 그래서 테이블을 만들고 싶습니다. Injections를 사용하여 내 테이블 연락처의 ID (USERNUMBER)로 삽입 된 메시지.Embeddable/ManyToOne/OneToMany가 작동하지 않습니다.

@Embeddable 
@Entity(name = "MESSAGE") 
public class Message implements Serializable { 


@ManyToOne 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "INCOME_MESSANGE", nullable = false) 
private String incomingMessage; 

@EmbeddedId 
@JoinColumn(name = "USERNUMBER", nullable = false) 
private Contact contact; 
ChatApplicationRemote chatApplicationRemote; 

public Message(String ip, String msg) throws IOException { 
    incomingMessage = msg; 
    contact = chatApplicationRemote.getcontactByIP(ip.toString()); 
} 

public Message(){ 

} 

public String getIncomingMessage() { 
    return incomingMessage; 
} 

public Contact getContact() { 
    return contact; 
} 

그리고 여기에 내 연락처 :

@Entity(name = "CONTACTS") 
@Embeddable 
public class Contact implements Serializable { 

/** 
* 
*/ 
private static final long serialVersionUID = -6855140755056337926L; 
@Column(name = "NAME", nullable = false) 
private String name; 
@Column(name = "PRENAME", nullable = false) 
private String vorname; 
@Column(name = "IP", nullable = false) 
private String ip; 
@Column(name = "PORT", nullable = false) 
private Integer port; 
@Id 
@OneToMany(mappedBy = "Message.incomingMessage") 
@Column(name = "USERNUMBER", nullable = false) 
private String usernumber; 

public Contact(String usernumber, String name, String vorname, String ip, String port) { 
    super(); 
    this.usernumber = usernumber; 
    this.name = name; 
    this.vorname = vorname; 
    this.ip = ip; 
    this.port = Integer.parseInt(port); 
} 

public Contact(){ 

} 

public String getUsernumber() { 
    return usernumber; 
} 

//...... 

그래서 내 메시지에, 나는 두 가지 오류를 얻을 : @ManyToOne 예외 : 여기 는 '내 메시지의 클래스에요 대상 법인 "java.lang의 엔터티 @EmbeddedId가 "던졌습니다되지 .String : de.nts.data.Contact는 임베디드

로 매핑되지는 그래서 .. 잠시 동안 인터넷 검색과 내가 가지고하지 않았다 orm.xml abouta 뭔가를 발견 . 그리고 하나를 만들더라도 @EmbeddedID는 throw합니다. 임베디드 ID 클래스에는 equals() 및 hashcode()에 대한 메소드 정의가 포함되어야하며 orm.xml 속성 "usernumber"에는이 컨텍스트에서 잘못된 매핑 유형이 있습니다.

아무도 도와 줄 수 있습니까?

+3

기본 사항을 알아야합니다. 임베드 가능 클래스는 엔티티 상태의 일부를 구성하는 필드 집합입니다. 엔티티는 테이블에 매핑되고 다른 엔티티와의 연관을 가질 수있는 ID를 갖는 클래스입니다. Embeddable과 Entity를 동시에 사용하는 클래스에 주석을다는 것이 동시에 의미가 없으므로 달성하고자하는 것을 이해하는 데 어려움이 있습니다. String과의 연관성은 전혀 이해가되지 않습니다. Contact 엔티티가 필요하다는 느낌이 들었습니다. Contact 엔티티에는 Message 엔티티와 OneToMany 연관이 있습니다. –

답변

0

는 출발점으로

@Entity 
public class Message implements Serializable { 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Long id; 

    @Column(name = "INCOME_MESSANGE", nullable = false) 
    private String incomingMessage; 

    @ManyToOne 
    @JoinColumn(name = "USERNUMBER", nullable = false) 
    private Contact contact; 

    @Transient 
    ChatApplicationRemote chatApplicationRemote; 
    .. 
} 


@Entity 
public class Contact implements Serializable { 

    private static final long serialVersionUID = -6855140755056337926L; 

    @Column(name = "NAME", nullable = false) 
    private String name; 
    @Column(name = "PRENAME", nullable = false) 
    private String vorname; 
    @Column(name = "IP", nullable = false) 
    private String ip; 
    @Column(name = "PORT", nullable = false) 
    private Integer port; 
    @Id 
    @Column(name = "USERNUMBER", nullable = false) 
    private String usernumber; 

    @OneToMany(mappedBy = "incomingMessage") 
    private LIst<Message> messages; 
    .. 
} 

어쩌면 시도하지만, JB Nizet 제안으로, 먼저 기초를 얻고 구축하기 위해 몇 가지 간단한 JPA/자바 데모로 시작합니다. 당신의 예제는 단지 예외가 보여주고있는 것보다 더 많은 에러를 가지고있다. 그 중 아무 것도 ORM.xml을 던져서 해결되지 않는다.

+0

좋아, 고맙습니다. :) –