问题描述
这里是我到目前为止 -
复合主键:
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 private actvAtId;
// getters,setters,equals,hashcode
}
实体类1 :
pre $ @ $ $ c $ @Entity @Table(name =Table1)
@IdClass(PKClass.class)
public class AtLinkData实现Serializable
{
@Id @Column(name =ACT_ID,nullable = false)
private private actvId;
@Id @Column(name =ACT_AT_ID)
private private actvAtId;
@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER,mappedby =atLinkData)
@JoinColumn(name =ACT_AT_ID)
私人AtData atData;
// getters,setters
}
实体类2:
@Entity @Table(name =Table2)
公共类AtData实现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;
//其他变量
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name =ACT_AT_ID)
私人AtLinkData atLinkData;
// getters setters
}
我一直在尝试不同的事情,但使用上面的代码,我得到错误:
引起:org.hibernate.MappingException:用于atLinkData的断列映射.id of:com.test.database.AtData
这是我如何解决它:
AtLinkData.java
@ Id
@GeneratedValue(generator =foreignGenerator)
@ org.hibernate.annotations.GenericGenerator(name =foreignGenerator,strategy =foreign,parameters = @Parameter(name =property,值)=atData))
@Column(name =ACT_AT_ID)
私人长期actvAtId;
@OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name =ACT_AT_ID,insertable = false,updatable = false)
private AtData atData;
// getters,setters
AtData.java
@OneToOne(fetch = FetchType.LAZY,mappedBy =atData)
私人AtLinkData atLinkData;
感谢寻求帮助。
- Table 1 has only two columns which form a composite key.
- Table 2 id column is being generated.
- Value for one property of Table1 I am supplying and for second property I need it to pick up the generated value of Table2.Here is what I have so far-
Composite primary key:
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
}
Entity class 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
}
Entity class 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
}
I have been trying different things, but with the code above, I am getting the error:
Caused by: org.hibernate.MappingException: broken column mapping for: atLinkData.id of: com.test.database.AtData
Here is how I solved it:
AtLinkData.java
@Id
@GeneratedValue(generator = "foreignGenerator")
@org.hibernate.annotations.GenericGenerator(name = "foreignGenerator", strategy = "foreign", parameters = @Parameter(name = "property", value = "atData"))
@Column(name = "ACT_AT_ID")
private long actvAtId;
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "ACT_AT_ID",insertable=false,updatable=false)
private AtData atData;
// getters, setters
AtData.java
@OneToOne(fetch = FetchType.LAZY, mappedBy="atData")
private AtLinkData atLinkData;
Thanks @CycDemo for your help.
这篇关于在另一个实体中被引用的组合键的一个Id的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!