Вопрос о критериях гибернации - PullRequest
0 голосов
/ 26 апреля 2011

Предположим, у меня есть два POJO Hibernate: клиент и заказ.Таблица заказов имеет три соответствующих столбца: customerId, totalItemsSold и totalCost.В таблице Customer есть столбцы: customerId, firstName, lastName и city.

Я сопоставил множество-один между таблицами Order и Customer.Мой заказ POJO содержит объект Customer.Я хочу выполнить следующий запрос Criteria:

DetachedCriteria crit = DetachedCriteria.forClass(Order.class);
crit.add(Restrictions.eq("customer.city", "Chicago"));
getHibernateTemplate().findByCriteria(crit);

Всегда выдается следующее исключение:

org.springframework.orm.hibernate3.HibernateQueryException: could not resolve property: customer.city of: Order

Как я могу использовать Criteria для поиска заказов по городу клиента?Мой заказ Pojo содержит объект Customer с именем «Клиент» с соответствующими методами получения и установки .....

Редактировать (класс заказа / клиента) в соответствии с запросом:

public class Customer {
     private Integer customerId;
     private String firstName;
     private String lastName;
     private String city;

     public Integer getCustomerId() { return customerId; }
     public void setCustomerId(Integer customerId) { this.customerId = customerId; }
     public String getFirstName() { return firstName; }
     public void setFirstName(String firstName) { this.firstName = firstName; }
     public String getLastName() { return lastName; }
     public void setLastName(String lastName) { this.lastName = lastName; }
     public String getCity() { return city; }
     public void setCity(String city) { this.city = city; }
}

public class Order { 
     private Customer customer;
     private Integer totalItemsSold;
     private Integer totalCost;

     public Customer getCustomer() { return customer; }
     public void setCustomer(Customer customer) { this.customer = customer; }
     public Integer getTotalItemsSold() { return totalItemsSold; }
     public void setTotalItemsSold(Integer totalItemsSold) { this.totalItemsSold = totalItemsSold; }
     public Integer getTotalCost() { return totalCost; }
     public void setTotalCost(Integer totalCost) { this.totalCost = totalCost; }
}

Вот отображение hbm класса Order (которое содержит отображение между Customer и Order):

<many-to-one name="customer" class="Customer" column="customerId" />

Ответы [ 3 ]

2 голосов
/ 26 апреля 2011

То, что вы опубликовали, выглядит нормально. Может быть, в вашем файле hbm есть ошибка?

Не видя полного hbm, я испытал бы искушение явно рассказать вашим независимым критериям об отношениях с клиентами:

crit.createAlias("customer", "customer"); 
1 голос
/ 01 июля 2011

Если вы просто ищете по customerId, то то, что у вас есть:

DetachedCriteria crit = DetachedCriteria.forClass(Order.class);
crit.add(Restrictions.eq("customer.customerId", 12));
getHibernateTemplate().findByCriteria(crit);

может работать.В противном случае, Джефф и другие, упомянутые выше, вы должны иметь соединение с таблицей клиентов, как упомянуто

crit.createAlias("customer", "customer"); 
0 голосов
/ 26 апреля 2011

Является ли переменная экземпляра Customer в вашем классе Order именем customer или customerId?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...