4

Student クラスは Resume 型のオブジェクトとの OneToOne 関連付けを持ち、Resume クラスは Master 型のコレクションと OneToMany 関連付けを持ち、master はプロパティ degreeName を持ちます。私が達成したいのは:

Student.resume.masters.degreeName が (?,?,?,.....) にあるすべての学生を選択します。

すべてのコレクション (マスター) オブジェクトを検索する必要があります。

以下のコードにはコンパイル エラーはありませんが、期待どおりの結果が得られません。修正してください。

学生団体:

 @Entity
 public class Student {
      @OneToOne(fetch = FetchType.LAZY, mappedBy = "student", cascade = CascadeType.ALL)
      private Resume resume;
   }  

エンティティの再開:

@Entity
public class Resume {
     @OneToMany(mappedBy="resume",cascade=CascadeType.ALL)
     private List<Master> masters=new ArrayList<>();
     @OneToOne(fetch=FetchType.LAZY)
     @PrimaryKeyJoinColumn
     private Student student;
   }  

マスター エンティティ:

@Entity
public class Master {
   @Id
   @GeneratedValue(strategy=GenerationType.AUTO)
   private int id;
   @ManyToOne(fetch=FetchType.LAZY)
   @JoinColumn(name="resume_id")
   private Resume resume;
   private String degreeName;
}

ダオ:

    Criteria studentCriteria = session.createCriteria(Student.class);
    Criteria resumeCriteria = studentCriteria.createCriteria("resume");
    Criteria mastersCriteria = resumeCriteria.createCriteria("masters");
    List<String> degreeslist = new ArrayList<>(Arrays.asList(degrees));
    //degreeList is collection of values on which the student will be searched

    if (degreeslist.size() == 1) {
        mastersCriteria.add(Restrictions.eq("degreeName",
                degreeslist.get(0)));
    } else {

        mastersCriteria.add(Restrictions.in("degreeName", degreeslist));
      }
4

1 に答える 1