- 表1只有兩列形成組合鍵。
- 表2 id列正在生成。
- Table1的一個屬性的值我正在提供,第二個屬性我需要它來拾取Table2的生成值。 這裏是我有這麼遠
複合主鍵:要在另一個實體中引用的組合鍵的一個ID
public class PKClass implements Serializable
{
private static final long serialVersionUID = -2092390836751020965L;
public PKClass(){}
public PKClass(long actId, long actAttId){
this.actvId = actId;
this.actvAtId = actAttId;
}
private long actvId;
private long actvAtId;
// getters, setters, equals, hashcode
}
實體1類:
@Entity @Table(name = "Table1")
@IdClass(PKClass.class)
public class AtLinkData implements Serializable
{
@Id @Column(name = "ACT_ID", nullable = false)
private long actvId;
@Id @Column(name = "ACT_AT_ID")
private long actvAtId;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER, , mappedBy = "atLinkData")
@JoinColumn(name = "ACT_AT_ID")
private AtData atData;
// getters, setters
}
實體2類:
@Entity @Table(name = "Table2")
public class AtData implements Serializable
{
@TableGenerator(name = "somename", table = "sometable", pkColumnName = "somecolumn", valueColumnName = "valuename", pkColumnValue = "Table2", allocationSize = 1)
@Id @GeneratedValue(strategy = GenerationType.TABLE, generator = "somename")
@Column(name = "ACT_AT_ID")
private Long id;
// other variables
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ACT_AT_ID")
private AtLinkData atLinkData;
// getters setters
}
我有一直在嘗試不同的事情,但通過上面的代碼,我得到了婷錯誤:
Caused by: org.hibernate.MappingException: broken column mapping for: atLinkData.id of: com.test.database.AtData
我不能在表2中添加另一列,它是一個現有的表。 – Chiranjib
@Chiranjib檢查我的更新信息。 – CycDemo
建議更改代碼,現在代碼失敗,因爲PKClass中的actvAtId爲空,因此hashcode()失敗。我應該在AtLinkData中實例化PKClass嗎?據我所知,我猜不是。 :/ 現在,如果我單獨嘗試,實體AtData正在成功保存。 – Chiranjib