Ниже приведен тот же код очень похож на мой код, где я столкнулся вопроскритерии Hibernate на Композитный 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
}
Если я создам критерий, как показано ниже: -
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: ОШИБКА: оператор не существует: целое число = BYTEA
даже я создал отдельный класс BC, который имеет объект класса B и C и использовал его в классе 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 для всех классов.
решение, которое я нашел изменил класс А, как показано ниже: -
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;
Следующее решение сработало для меня – amRika