2017-03-29 7 views
0

@JoinColumnについて多くの質問がありました。このコンセプトは、次のような状況に遭遇するまでわかりました。休止状態でOneToOneマッピングで@JoinColumnを使用する方法は?

マッピングがOneToOne単方向マッピングであるとしましょう。私は親クラスで以下のアノテーションを使用しています: ケース1: - @JoinColumn(name="test_Id",referencedColumnName="refToPrimaryKey")、EntityクラスがSerializableインターフェイスを実装していません。この場合、プログラムは例外なく実行されます。 ケース2: @JoinColumn(name="test_Id",referencedColumnName="refToNonPrimaryKey")エンティティクラスが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) 

:ここ

プログラムは次のように例外をスローしていますか?

答えて

0

は、オブジェクトの解体表現を返しますdisassemble、原因ショー休止ドキュメントを1として cannot be cast to java.io.Serializable at org.hibernate.type.CollectionType.getKeyOfOwner(CollectionType.java:414)

あたりのように、第二レベルのキャッシュを使用しています。これは、Hibernateが第2レベルのキャッシングで使用する値なので、最も簡単な形式に値を分割するように注意する必要があります。特に企業の場合、この は、それらを構成部分に分割することを意味します。あなたのエンティティで

あなたは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インタフェースを実装する必要が

+0

ブッシュマン私は2番目のレベルのキャッシュを使用していません。私はちょうど非キー列を参照して@JoinColumn注釈を使用しようとしました。 – Rohit

+0

@Rohitここにコードを追加できますか? –

0
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; 

} 
関連する問題