2016-09-15 72 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)); 
什麼工作