0

Ниже приведен тот же код очень похож на мой код, где я столкнулся вопроскритерии 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; 
+0

Следующее решение сработало для меня – amRika

ответ

0

ошибка с указанием, что вы пытаетесь сравнить 2 разные вещи. «a.bc» вернет объект blob и bc внутри java даст вам фактическое значение указателя. Вы можете изменить ограничение с

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

Обратите внимание, что это будет работать, так как вы определяете класс Criteria с createCriteria(A.class,"a") так «а» будет Алиас для A Class

Для получения дополнительной информации, проверка это answer

+0

Это не работало таким образом ... Мне нужно удалить экземпляр B и C из A, а вместо этого нужно сделать их java.lang.Long (который ранее был java.abc .B и java.abc.C) – amRika

+0

Я обновляю свой ответ с помощью рабочего решения. Надеюсь, у вас есть возможность взглянуть на него. – amRika

 Смежные вопросы

  • Нет связанных вопросов^_^