2017-04-20 8 views
1

I持っ関係多対多では、次の表アクセスの複合キー

タスク表:複合主キーが含まれている

[OPTION_ID] pk 
     ,[OPTION_VALUE] 

とtask_options表:

[TASK_ID] pk 
    ,[TASK_NAME] 

オプション表前のテーブルの2つの外部キーからのもの

[TASK_ID] 
     ,[OPTION_ID] 

、それは次のようにマッピングです:

Task_Options.java 
@Entity 
@Table(name = "TASK_OPTIONS") 
public class Task_Options implements Serializable { 

    @EmbeddedId 
    private pk pk; 

    @ManyToOne 
    @MapsId("Task_ID") 
    private Task task; 

    @ManyToOne 
    @MapsId("Option_ID") 
    private Options options; 

    public Task getTask() { 
     return task; 
    } 

    public void setTask(Task task) { 
     this.task = task; 
    } 

    public Options getOptions() { 
     return options; 
    } 

    public void setOptions(Options options) { 
     this.options = options; 
    } 

    /*Inner Class for Composite primary key*/ 
    @Embeddable 
    public static class pk implements Serializable { 

     private int Task_ID;   
     private int Option_ID; 

     public pk(int Task_ID, int Option_ID) { 
      this.Task_ID = Task_ID; 
      this.Option_ID = Option_ID; 
     } 

     @Override 
     public int hashCode() { 
      int hash = 7; 
      hash = 47 * hash + this.Task_ID; 
      hash = 47 * hash + this.Option_ID; 
      return hash; 
     } 

     @Override 
     public boolean equals(Object obj) { 
      if (this == obj) { 
       return true; 
      } 
      if (obj == null) { 
       return false; 
      } 
      if (getClass() != obj.getClass()) { 
       return false; 
      } 
      final pk other = (pk) obj; 
      if (this.Task_ID != other.Task_ID) { 
       return false; 
      } 
      if (this.Option_ID != other.Option_ID) { 
       return false; 
      } 
      return true; 
     } 

    } 

} 

は私が理由のTASK_IDの作業ではない。この

   Criteria criteria = session.createCriteria(Task_Options.class, "Tsop"); 
       criteria.createAlias("Tsop.Task_ID", "task"); 
       criteria.createAlias("Tsop.Option_ID", "op"); 
       criteria.add(Restrictions.eqProperty("Tsop.task.Task_ID", "task.task_ID")); 
       criteria.add(Restrictions.eqProperty("Tsop.options.Option_ID", "op.option_ID")); 

を試してみました

select OPTION_VALUE from [dbo].[OPTION] AS op      
    INNER JOIN [dbo].[TASK_OPTIONS] AS TSOP ON op.OPTION_ID = TSOP.OPTION_ID 
    INNER JOIN [dbo].[TASK] AS tsk ON tsk.TASK_ID = TSOP.TASK_ID 
    Where Tsk.TASK_ID = 2 

次のクエリを実行するために休止状態の基準を作成したいですTask_optionsは解決できません。

答えて

0

@EmbeddedId private pk pk;を必要としません。 Hibernateは、IDにマップされたオブジェクトを解決できます。

この条件で試すことができますか?

Criteria criteria = session.createCriteria(Task_Options.class, "Tsop"); 
criteria.createAlias("task", "task"); 
criteria.createAlias("options", "op"); 
criteria.add(Restrictions.eqProperty("task.task_id", 2));