【发布时间】:2017-12-21 22:44:48
【问题描述】:
我有三个简单的实体:
@Entity
public class Category {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(fetch = FetchType.LAZY)
private List<Subject> subjects;
}
@Entity
public class Subject {
@Id
@GeneratedValue
private Long id;
private String name;
@OneToMany(fetch = FetchType.LAZY)
private List<Topic> topics;
}
@Entity
public class Topic {
@Id
@GeneratedValue
private Long id;
private String name;
}
我使用标准 api 来获取数据。我需要预先获取主题。
CriteriaBuilder cb = this.em.getCriteriaBuilder();
CriteriaQuery<Category> cq = cb.createQuery(Category.class);
Root<Category> root = cq.from(Category.class);
cq.select(root);
Join subjects = (Join) root.fetch("subjects");
Join topics = subjects.join("topics");
Predicate predicate1 = cb.equal(topics.get("name"), "topic2");
cq.where(predicate1);
List<Category> resultList = this.em.createQuery(cq).getResultList();
但我得到以下异常:
org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'generatedAlias2.name' [select generatedAlias0 from entities.Category as generatedAlias0 inner join fetch generatedAlias0.subjects as generatedAlias1 where generatedAlias2.name=:param0]
谁能告诉我这是什么问题。顺便说一句,如果我使用 join 而不是 fetch 则不会出现错误
【问题讨论】:
标签: hibernate jpa criteria-api