2016-09-15 76 views
1

我有一个实体的递归结构:实体Goal有一个属性subgoals这是一个Goal实体本身的列表。休眠查询 - 实体不是另一个实体的子实体

@Entity 
@Table(name = "GOAL") 
public class Goal { 
    ... 
    @OneToMany 
    @JoinTable(name = "goal_subgoals") 
    private List<Goal> subgoals = new ArrayList<Goal>(); 
    ... 
} 

现在我需要一个查询,得到所有Goal实体,其一个任何Goalsubgoal

既然有一个连接表goal_subgoals,与列goal_idsubgoals_id,也许我需要的是其id是不是在该表的subgoals_id列中的所有目标。有关如何做到这一点的任何建议?

我知道如何让那些子目标的所有目标:

Query query = session.createQuery(
      "SELECT subgoalx " 
        +" FROM Goal goalx " 
        + "JOIN goalx.subgoals subgoalx "      
      ); 

是否有一种方式来获得该组的补充?

回答

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)); 
什么工作