2016-06-16 15 views
0

私はJavaをよく知っていて、現在ChatProgrammに取り組んでいます。 だから私はテーブルを作成したいインジェクションを使用してテーブルの連絡先のID(USERNUMBER)で埋め込まれたメッセージ。 ここでの私のメッセージのクラス:Embeddable/ManyToOne/OneToMany not working

@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; 
} 

//...... 

、私は2つのエラーを取得: @ManyToOneはスロー:ターゲットエンティティ「のjava.langを.String "はエンティティではありません @EmbeddedID throws:de.nts.data.Contactが埋め込み可能としてマップされていません

私はしばらくの間googled ...と私が持っていなかったaboutm.xml 。埋め込みIDクラスにequals()およびhashcode()のメソッド定義を含める必要があり、orm.xml属性 "usernumber"にはこのコンテキストで無効なマッピングタイプがあります。

誰でもお手伝いできますか?

+3

基本を学ぶ必要があります。埋め込み可能クラスは、エンティティの状態の一部を構成するフィールドの集合です。エンティティはクラスであり、IDを持ち、これはテーブルにマップされ、他のエンティティとの関連付けを持つことができます。 EmbeddableとEntityで同時にクラスに注釈を付けると、意味をなさないので、達成したいことを理解するのは難しいです。 Stringとの関連付けは全く意味がありません。私は、単にメッセージエンティティとOneToManyの関連付けを持つContactエンティティが必要な気がします。 –

答えて

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/Javaのデモを開始します。あなたの例には、例外が表示されていたものだけでなく、ORM.xmlを投げ込むだけで解決されるものもありません。

+0

ありがとう、たくさん:) –