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));
}