2012-01-24 10 views
2

多対多マッピング(ヘルパー表)+余分なフィールド+コンポジット主キー

http://www.img-teufel.de/uploads/Unbenannt1d4f8a349jpg.jpg

を(原因サイズに埋め込まれていない)

それは私のクラスを作成しますどのようにしたいのですが、tbl_license_user_alertsに複合主キーはありません。

私の場合はどのように作成するのですか?

tbl_license:

@Entity 
@Table(name = "tbl_license") 
public class License implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    @Column(name = "id", nullable = false, columnDefinition = "serial") 
    private int id; 

    @ElementCollection 
    @JoinTable(name = "tbl_license_user_alert") 
    private List<LicenseUserAlert> alerts; 

    public int getId() 
    { 
    return id; 
    } 

    public void setId(int id) 
    { 
    this.id = id; 
    } 

    public List<LicenseUserAlert> getAlerts() 
    { 
    return alerts; 
    } 

    public void setAlerts(List<LicenseUserAlert> alerts) 
    { 
    this.alerts = alerts; 
    } 
} 

tbl_user:

@Entity 
@Table(name = "tbl_user") 
public class User implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue 
    @Column(name = "id", nullable = false, columnDefinition = "serial") 
    private int id; 

    @ElementCollection 
    @JoinTable(name = "tbl_license_user_alert") 
    private List<LicenseUserAlert> alerts; 

    public int getId() 
    { 
    return id; 
    } 

    public void setId(int id) 
    { 
    this.id = id; 
    } 

    public List<LicenseUserAlert> getAlerts() 
    { 
    return alerts; 
    } 

    public void setAlerts(List<LicenseUserAlert> alerts) 
    { 
    this.alerts = alerts; 
    } 
} 

tbl_license_user_alert:

@Embeddable 
public class LicenseUserAlert implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @ManyToOne 
    @JoinColumn(name = "license_id"/*, columnDefinition = "int"*/) 
    private License license; 

    @ManyToOne 
    @JoinColumn(name = "user_id"/*, columnDefinition = "int"*/) 
    private User user; 

    @Column(name = "timer", nullable = false, columnDefinition = "int default 86400") 
    private int timer = 86400 

    public License getLicense() 
    { 
    return license; 
    } 

    public void setLicense(License license) 
    { 
    this.license = license; 
    } 

    public User getUser() 
    { 
    return user; 
    } 

    public void setUser(User user) 
    { 
    this.user = user; 
    } 

    public int getTimer() 
    { 
    return timer; 
    } 

    public void setTimer(int timer) 
    { 
    this.timer = timer; 
    } 
} 

EDIT:

@ danny.lesnik 次に例外が発生します: org.hibernate.AnnotationException:com.example.my.entities.license.LicenseUserAlertIdは@EmbeddedId:com.example.myとして使用するときは@Idプロパティを持つことができません。 entities.user.User.alerts.collection & &は

@Embeddable 
public class LicenseUserAlert implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    private LicenseUserAlertId id; 

    @Column(name = "timer", nullable = false, columnDefinition = "int default 86400") 
    private int timer = 86400; 

    public LicenseUserAlertId getId() 
    { 
    return id; 
    } 

    public void setId(LicenseUserAlertId id) 
    { 
    this.id = id; 
    } 

    public License getLicense() 
    { 
    return id.getLicense(); 
    } 

    public void setLicense(License license) 
    { 
    id.setLicense(license); 
    } 

    public User getUser() 
    { 
    return id.getUser(); 
    } 

    public void setUser(User user) 
    { 
    id.setUser(user); 
    } 

    public int getTimer() 
    { 
    return timer; 
    } 

    public void setTimer(int timer) 
    { 
    this.timer = timer; 
    } 
} 

IdClass element.id:

@Embeddable 
public class LicenseUserAlertId implements Serializable 
{ 
    private static final long serialVersionUID = 1L; 

    @ManyToOne 
    @JoinColumn(name = "license_id"/*, columnDefinition = "int"*/) 
    private License license; 

    @ManyToOne 
    @JoinColumn(name = "user_id"/*, columnDefinition = "int"*/) 
    private User user; 

    public License getLicense() 
    { 
    return license; 
    } 

    public void setLicense(License license) 
    { 
    this.license = license; 
    } 

    public User getUser() 
    { 
    return user; 
    } 

    public void setUser(User user) 
    { 
    this.user = user; 
    } 
} 

答えて

3

この記事を参照してくださいを

Mapping ManyToMany with composite Primary key and Annotation:

複合主キーを使用してテーブルをマップする方法の完全な例があります。

希望します。

+0

私自身の質問に答えることができず、更新されたコード – dtrunk

+0

weelを投稿する必要があったため、上記の投稿を編集しました。問題が何か分からず、コードを実行して実行中であることを確認してくださいちょうどそれを修正しようとしています。ところで、私はそれがあるはずの@transientアノテーションは見ません。とにかく私のコードを実行します。ありがとう。 –

+0

ありがとうございます。時間の圧力の下で私は働くことができません:-)あなたがしたこととまったく同じでしたし、それは働いた。 – dtrunk

関連する問題