:多対多マッピング(ヘルパー表)+余分なフィールド+コンポジット主キー
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;
}
}
私自身の質問に答えることができず、更新されたコード – dtrunk
weelを投稿する必要があったため、上記の投稿を編集しました。問題が何か分からず、コードを実行して実行中であることを確認してくださいちょうどそれを修正しようとしています。ところで、私はそれがあるはずの@transientアノテーションは見ません。とにかく私のコードを実行します。ありがとう。 –
ありがとうございます。時間の圧力の下で私は働くことができません:-)あなたがしたこととまったく同じでしたし、それは働いた。 – dtrunk