0

が、私は以下のような基準を作成する場合は、私が問題にはコンポジットIDに基準以下

//mapped to Table B 
class B implements Serializable { 
    //Primary key bId 
    private Long bId; 
    //Getter and setter for bId; 
} 

//Mapped to table C 
class C implements Serializable { 
    //Primary key bId 
    private Long cId; 
    //Getter and setter for cId; 
} 

//mapped to Table A (Which has composite key fBid and fCid) 
class A{ 
    //Composite primary key 
    private B bid; 
    private C cid; 
    //getter and setter for B and C 
    //Other fields 

} 

に直面しています私のコードに非常によく似て同じコードですが休止状態例外の下になって

org.postgresql.util.PSQLException:ERROR:演算子が存在しません:整数=はbytea

私はBとCクラスのオブジェクトを持つ別のクラスBCを作成し、これをクラスAで複合キーとして使用しました。その後、任意のヘルプは理解されるであろう

同じエラーそれでも

Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(A.class,"a"); 
      criteria.add(Restrictions.eq("a.BC", bc)); 
      A result = (A) criteria.uniqueResult(); 
      return result; 

をしました。

注: - すべてのクラスに対してhibernate xmlマッピングを実行しています。私は 発見した



ソリューションは、クラスA以下のように変更されました: -

class A{ 
private BC bc; 
//getter and setter 
} 

where BC 

class BC{ 
private B b; 
Private C c; 
//getter and setters 
} 

Criteria criteria = getSessionFactory().getCurrentSession().createCriteria(A.class,"a"); 
     criteria.add(Restrictions.eq("bc.b", b)); 
     criteria.add(Restrictions.eq("bc.c",c)); 
     A result = (A) criteria.uniqueResult(); 
     return result; 
+0

次のソリューションは私のために働いた – amRika

答えて

0

エラーは、2つの異なるものを比較しようとしていることを、示しています。 "a.bc"はブロブオブジェクトを返し、bcはjavaの中に実際のポインタ値を与えます。あなたがそう createCriteria(A.class,"a") とCriteriaクラスを定義しているので、あなたは「」詳細情報は、チェックのためにA Class

の別名になり、これが動作すること

criteria.add(Restrictions.eq("a.bId.bId", b.bId)); 
criteria.add(Restrictions.eq("a.cid.cId",c.cId)); 

注意と制限を変更することができますこのanswer

+0

それは仕事をしなかった...私はAからBとCのインスタンスを削除する代わりに、それらをjava.lang.Long(以前はjava.abcだった.Bとjava.abc.C) – amRika

+0

私は実用的な解決策で自分の答えを更新します。 – amRika

関連する問題