Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > hibernate+join+проблема


Автор: lv151 24.3.2008, 02:29
Код

<many-to-one 
     name="owner" 
     column="owner_id" 
     class="shop.Pokupatel"
    />


пытаюсь делать так:

Код

List tovars = this.getSession() 
                    .createQuery("from shop.Tovar t" +
                              " where t.Pokupatel.id =:ownerid and" + (" where t.owner =:ownerid and" +)
                              " t.id=:tovarid") 
                    .setParameter("ownerid", ownerId) 
                    .setParameter("tovarid", shipId)
                    .list();

.................

пробовал через HibernateTemplate, постоянно одно и то же :

javax.servlet.ServletException: IllegalArgumentException occurred calling getter of shop.Pokupatel.id; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of shop.Pokupatel.id

Автор: iluvatar 24.3.2008, 09:19
а в классе shop.Tovar точно есть поле Pokupatel и getter к нему? Здесь важен регистр. Также проверь наличие getter'а для Pokupatel.id

Автор: lv151 24.3.2008, 10:42
Код

public class Tovar implements Serializable {
............................
private Pokupatel owner;
.........................

public Pokupatel getOwner() {
        return this.owner;
    }

public void setOwner(Pokupatel owner) {
        this.owner = owner;
    }
...............


Код

public class  Pokupatel  implements Serializable {
........
public long getId() {
        return this.id;
}
public void setId(long id) {
        this.id = id;
}


если не как пареметр а так - where owner = 0 , то всё ок.



Автор: iluvatar 24.3.2008, 15:10
Цитата(lv151 @  24.3.2008,  02:29 Найти цитируемый пост)


пытаюсь делать так:

List tovars = this.getSession() 
                    .createQuery("from shop.Tovar t" +
                              " where t.Pokupatel.id =:ownerid and" + (" where t.owner =:ownerid and" +)
                              " t.id=:tovarid") 
                    .setParameter("ownerid", ownerId) 
                    .setParameter("tovarid", shipId)
                    .list();
.................




Цитата(lv151 @  24.3.2008,  10:42 Найти цитируемый пост)
    
public class Tovar implements Serializable {

  private Pokupatel owner;
  public Pokupatel getOwner() {
          return this.owner;
  }
}


Так переменная называется owner, a Pokupatel - это только имя класса. Запрос будет выглядеть так:
Код

List tovars = this.getSession() 
                    .createQuery("from Tovar t" +
                              " where t.owner.id =:ownerid and" +
                              " t.id=:tovarid") 
                    .setParameter("ownerid", ownerId) 
                    .setParameter("tovarid", shipId)
                    .list();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)