[英]how to use @JoinColumn in OneToOne mapping in hibernate?
我在@JoinColumn上看到了很多問題,在我遇到以下情況之前,這個概念對我很清楚。
讓我們考慮映射是OneToOne單向映射。 我在父類中使用了以下標記:情況1:- @JoinColumn(name="test_Id",referencedColumnName="refToPrimaryKey")
和Entity類未實現Serializable接口。 在這種情況下,程序將毫無例外地執行。 情況2:- @JoinColumn(name="test_Id",referencedColumnName="refToNonPrimaryKey")
和Entity類未實現Serializable接口。
在這里程序拋出異常,如:
threw exception [java.lang.ClassCastException:
com.homecare.persistance.resource.TestEntity cannot be cast to java.io.Serializable] with root cause
java.lang.ClassCastException: com.homecare.persistance.resource.TestEntity cannot be cast to java.io.Serializable at org.hibernate.type.CollectionType.getKeyOfOwner(CollectionType.java:414)
你們可以幫我了解一下為什么會這樣的概念嗎?
您是否在使用二級緩存,按原因導致cannot be cast to java.io.Serializable at org.hibernate.type.CollectionType.getKeyOfOwner(CollectionType.java:414)
顯示cannot be cast to java.io.Serializable at org.hibernate.type.CollectionType.getKeyOfOwner(CollectionType.java:414)
根據休眠文檔, disassemble
返回對象的反匯編表示。 這是Hibernate在二級緩存中將使用的值,因此應注意將值分解為最簡單的形式。 尤其對於實體而言,這意味着將它們分解為組成部分。
如果您將檢查org.hibernate.type.CollectionType包
//This solution would allow us to eliminate the owner arg to disassemble(), but
//what if the collection was null, and then later had elements added? seems unsafe
//session.getPersistenceContext().getCollectionEntry( (PersistentCollection) value ).getKey();
final Serializable key = getKeyOfOwner(owner, session);
if (key==null) {
return null;
}
else {
return getPersister(session)
.getKeyType()
.disassemble( key, session, owner );
}
因此,您需要在實體中實現Serializable接口
Please find below code.let me know if you need any other information:
@Setter
@Getter
@Entity
@Table(name="test")
public class TestEntity imple`enter code here`ments Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@Column(name="name")
private String name;
@Column(name="roll")
private int roll;
@Column(name="stream")
private String stream;
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="for_Key",referencedColumnName="roll")
private List<TestEntityChild> testEntityChildList;
}
Chile Entity class
@Getter
@Setter
@Entity
@Table(name="testchild")
public class TestEntityChild {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="Test_id")
private int testId;
@Column(name="city")
private String city;
@Column(name="state")
private String state;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.