Chi*_*jib 2 java hibernate jpa
复合主键:
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
}
Run Code Online (Sandbox Code Playgroud)
实体类 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
}
Run Code Online (Sandbox Code Playgroud)
实体类 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
}
Run Code Online (Sandbox Code Playgroud)
我一直在尝试不同的东西,但是使用上面的代码,我收到了错误:
Caused by: org.hibernate.MappingException: broken column mapping for: atLinkData.id of: com.test.database.AtData
Run Code Online (Sandbox Code Playgroud)
@OneToOne(mappedBy="otherInfo") 使用JoinColumns注释 not JoinColumn。
@OneToOne(fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "ACTVID", referencedColumnName = "ACTVID"),
@JoinColumn(name = "ACTVATID", referencedColumnName = "ACTVATID")
})
private AtLinkData atLinkData;
Run Code Online (Sandbox Code Playgroud)
AtData实体的DB 表必须添加两个外键列ACTVID和ACTVATID.
更新
如果您无法在 中添加新列Table 2,请mappedBy在AtData实体处使用属性,而不是AtLinkData。尝试如下。
AtLinkData.java
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "ACT_AT_ID")
private AtData atData;
Run Code Online (Sandbox Code Playgroud)
数据文件
@OneToOne(fetch = FetchType.LAZY, mappedBy="atData")
private AtLinkData atLinkData;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6298 次 |
| 最近记录: |