#java #hibernate
#java #переход в спящий режим
Вопрос:
@Entity
public class Store {}
@Entity
@Table(name = "storeitem")
public class StoreItem {
@Id @Column
private Integer storeId;
@Id
@ManyToOne @JoinColumn (name="productId", referencedColumnName="id")
private Product product;
@Column private Double cost;
}
mysql> desc storeitem;
------------- --------------------- ------ ----- --------- -------
| Field | Type | Null | Key | Default | Extra |
------------- --------------------- ------ ----- --------- -------
| StoreId | int(10) unsigned | NO | PRI | 0 | |
| ProductId | bigint(20) unsigned | NO | PRI | 0 | |
| cost | double unsigned | NO | | 0 | |
@Entity
@Table(name = "product")
public class Product {
@Id @GeneratedValue @Column(name = "Id")
private Long id;
@Column(name = "Name")
private String name;
}
mysql> desc product;
------------- --------------------- ------ ----- --------- ----------------
| Field | Type | Null | Key | Default | Extra |
------------- --------------------- ------ ----- --------- ----------------
| Id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| Name | varchar(70) | NO | | | |
Criteria cr=sess.createCriteria(StoreItem.class);
cr.add(Restrictions.eq("product.name","butter"));
cr.list();
Когда я пытаюсь выполнить фильтрацию по свойству дочернего элемента, я получаю следующее исключение
org.hibernate.QueryException: could not resolve property: product.name of:StoreItem
Ответ №1:
Try{
Criteria cr=sess.createCriteria(StoreItem.class, "si");
crit.createCriteria("product","product").add(Restrictions.eq("name","butter"));
cr.list();
}
Комментарии:
1. Я попробовал ‘cr.add(Restrictions.eq(«product»,»продукт»)) .add(Restrictions.eq(«name»,»butter»));’ и я получил эту ошибку ‘org.hibernate. Исключение QueryException: не удалось разрешить свойство: имя: StoreItem’
2. извините за ошибку в коде, смотрите отредактированный код. если попытка не удалась
Product,Product.class
, я не знаю больше аннотаций на основе вот почему.
Ответ №2:
HQL решил проблему
String hql="from StoreItem where productId in (select pd.id from Product pd where name = 'butter')";
Query query=sess.createQuery(hql);
query.list();