0

以下は、問題に直面している私のコードと非常によく似た同じコードです

//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

}

以下のような基準を作成する場合:-

B b = new B();
b.setBId(1l);

C c = new C();
c.setCId(2l);

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

私は例外を下回っています

org.postgresql.util.PSQLException: エラー: 演算子が存在しません: 整数 = バイト

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

1 に答える 1

0

エラーは、2 つの異なるものを比較しようとしていることを示しています。「a.bc」は blob オブジェクトを返し、bcjava 内では実際のポインター値が得られます。で制限を変更できます

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

これは機能することに注意してください。これは、 createCriteria(A.class,"a") 「a」がA Class

詳細については、この回答を確認してください

于 2016-09-28T13:44:30.940 に答える