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

했다.

참고 : 모든 클래스에 대해 최대 절전 모드 매핑을 수행하고 있습니다. 내가 발견



솔루션은 클래스 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"는 blob 객체를 반환하고 java 내부의 bc은 실제 포인터 값을 제공합니다. 당신이 그렇게 createCriteria(A.class,"a") 와 기준 클래스를 정의하기 때문에 "는이"더 많은 정보를 원하시면, 확인을 위해 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