2015-05-02 2 views
0

Я использую критерии спящего режима, и я хотел бы сравнить переменную в моем коде. Но у меня есть еще эта проблема:HIBERNATE - не удалось разрешить свойство

org.hibernate.QueryException: could not resolve property: isBike of: models.PolozkyEntity 

В другой части моего кода, он работает идеально, но там, я не знаю, почему это не работает.

PolozkyEntity.class:

@Entity 
@Table(name = "polozky", schema = "", catalog = "dbs_projekt") 
public class PolozkyEntity { 
    private int id; 
    private int idProduct; 
    private boolean isBike; 
    private boolean isAccessories; 
    private ObjednavkaEntity id_odbjednavkyByIdO; 

    @Id @GeneratedValue 
    @Column(name = "id") 
    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    @Basic 
    @Column(name = "id_product") 
    public int getIdProduct() { 
     return idProduct; 
    } 

    public void setIdProduct(int idProduct) { 
     this.idProduct = idProduct; 
    } 

    @Basic 
    @Column(name = "is_bike") 
    public boolean isBike() { 
     return isBike; 
    } 

    public void setBike(boolean isBike) { 
     this.isBike = isBike; 
    } 

    @Basic 
    @Column(name = "is_accessories") 
    public boolean isAccessories() { 
     return isAccessories; 
    } 

    public void setAccessories(boolean isAccessories) { 
     this.isAccessories = isAccessories; 
    } 


    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 

     PolozkyEntity that = (PolozkyEntity) o; 

     if (id != that.id) return false; 
     if (idProduct != that.idProduct) return false; 
     if (isBike != that.isBike) return false; 
     if (isAccessories != that.isAccessories) return false; 
     if (id_odbjednavkyByIdO != that.id_odbjednavkyByIdO) return false; 

     return true; 
    } 

    @Override 
    public int hashCode() { 
     int result = id; 
     result = 31 * result + idProduct; 
     result = 31 * result + (isBike ? 1 : 0); 
     result = 31 * result + (isAccessories ? 1 : 0); 
     return result; 
    } 

    @ManyToOne 
    @JoinColumn(name = "id_objednavky", referencedColumnName = "id", nullable = false) 
    public ObjednavkaEntity getId_odbjednavkyByIdO() { 
     return id_odbjednavkyByIdO; 
    } 

    public void setId_odbjednavkyByIdO(ObjednavkaEntity idObjednavky) { 
     this.id_odbjednavkyByIdO = idObjednavky; 
    } 

} 

Следующая

, когда я делаю это:

 Criteria criteria = session.createCriteria(PolozkyEntity.class); 
     criteria.add(Restrictions.like("id_odbjednavkyByIdO.id", find)); 
     criteria.add(Restrictions.like("isBike", "true")); 
     list_pom = criteria.list(); 

Задача на линии

criteria.add(Restrictions.like("isBike", "true")); 

Можете ли вы помочь мне пожалуйста?

+0

Попробуйте «велосипед» вместо «isBike». – misko321

+0

Спасибо :) Это помогает .... но почему? : D –

+0

@ TomášČičman Так как спецификация Java Bean определяет свойства. Свойство foo соответствует аксессурам getFoo() и setFoo(). Для булевых свойств геттер может быть isFoo(). –

ответ

0

Итак, как предложено в комментарии, используйте bike вместо isBike. Причина этого в том, что Hibernate достигает свойств класса через геттеры и сеттеры. Таким образом, Hibernate знает, что для доступа к собственности, например. prop, он должен использовать методы доступа, такие как getProp()\isProp() и setProp(...), поэтому программист может просто использовать имена свойств и не должен думать о методах доступа.

Когда вы положили isBike в свой код, Hibernate искал метод getIsBike(), чтобы получить к нему доступ, чего явно не удалось найти.

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