我有一个实体的递归结构:实体Goal
有一个属性subgoals
,它是Goal
个实体本身的列表。
@Entity
@Table( name = "GOAL" )
public class Goal {
...
@OneToMany
@JoinTable(name = "goal_subgoals")
private List<Goal> subgoals = new ArrayList<Goal>();
...
}
现在我需要一个查询来所有 Goal
个实体不 subgoal
任何Goal
。
由于有一个联接表goal_subgoals
,列goal_id
和subgoals_id
,我可能需要的是id
不在subgoals_id
的所有目标该表的列。有关如何做到这一点的任何建议吗?
我知道如何获得作为子目标的所有目标:
Query query = session.createQuery(
"SELECT subgoalx "
+" FROM Goal goalx "
+ "JOIN goalx.subgoals subgoalx "
);
有没有办法获得该套装的补充?
答案 0 :(得分:0)
这对我有用
DetachedCriteria subQuery = DetachedCriteria.forClass(Goal.class,"goalx")
.createAlias("goalx.subgoals", "subgoalsx")
.setProjection(Projections.property("subgoalsx.id"));
Criteria query = session.createCriteria(Goal.class)
.add(Subqueries.propertyNotIn("id",subQuery));