Java Spring数据JPA-规范查询
有一个使用属性表达式的查询:: 我做错了什么或忘记添加了什么 查询:按教师姓名显示所有学生 基本实体:Java Spring数据JPA-规范查询,java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,有一个使用属性表达式的查询:: 我做错了什么或忘记添加了什么 查询:按教师姓名显示所有学生 基本实体: @Entity @Inheritance(strategy = InheritanceType.JOINED) abstract class BaseModel { @Id @Column(name = "id") @Getter @GeneratedValue(strategy = GenerationType.AUTO) private long id; prote
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
abstract class BaseModel {
@Id
@Column(name = "id")
@Getter
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
protected BaseModel() {
}
}
实体教师:
@Entity
@Table(name = "teacher")
public final class Teacher extends BaseModel {
@OneToOne
@JoinColumn(name = "teacher_id")
private PupilInClassRoom pupilInClassRoom;
@Column(nullable = false)
@Getter
@Setter
private String name;
@Column(nullable = false)
@Getter
@Setter
private String surname;
@Column(nullable = false)
@Getter
@Setter
private String discipline;
public Teacher() {
}
}
实体学生:
@Entity
@Table(name = "pupil")
public final class Pupil extends BaseModel {
@OneToOne
@JoinColumn(name = "pupil_id")
private PupilInClassRoom pupilInClassRoom;
@Column(nullable = false)
@Getter
@Setter
private String name;
@Getter
@Setter
@Column(nullable = false)
private String surname;
public Pupil() {
}
}
实体教室:
@Entity
@Table(name = "class_room")
public final class ClassRoom extends BaseModel {
@OneToOne
@JoinColumn(name = "class_Room_id")
private PupilInClassRoom pupilInClassRoom;
@Column(nullable = false)
@Getter
@Setter
private String name;
public ClassRoom() {
}
}
@Entity
@Table(name = "pupil_in_class_room")
public final class PupilInClassRoom extends BaseModel {
@OneToOne(mappedBy = "pupilInClassRoom")
@Getter
@Setter
private Pupil pupil;
@OneToOne(mappedBy = "pupilInClassRoom")
@Getter
@Setter
private ClassRoom classRoom;
@OneToOne(mappedBy = "pupilInClassRoom")
@Getter
@Setter
private Teacher teacher;
public PupilInClassRoom() {
}
实体教室:
@Entity
@Table(name = "class_room")
public final class ClassRoom extends BaseModel {
@OneToOne
@JoinColumn(name = "class_Room_id")
private PupilInClassRoom pupilInClassRoom;
@Column(nullable = false)
@Getter
@Setter
private String name;
public ClassRoom() {
}
}
@Entity
@Table(name = "pupil_in_class_room")
public final class PupilInClassRoom extends BaseModel {
@OneToOne(mappedBy = "pupilInClassRoom")
@Getter
@Setter
private Pupil pupil;
@OneToOne(mappedBy = "pupilInClassRoom")
@Getter
@Setter
private ClassRoom classRoom;
@OneToOne(mappedBy = "pupilInClassRoom")
@Getter
@Setter
private Teacher teacher;
public PupilInClassRoom() {
}
Join瞳孔\u瞳孔classroomjoin=
root.join(“pupilin教室”);
加入教师\学生班级加入=
学生们在教室里加入。加入(“老师”);
root.join(“学生id”)
->root.join(“学生id”)
加入
->加入
pupliClassRoomJoin.join(“教师id”)
->pupliClassRoomJoin.join(“教师”)
上面的更新是我猜做你想做的事情所需要的。可以尝试吗?问题的解决方案:
public final class PupilSpecification {
public static Specification<Pupil> findPupilByTeacherSpecification(String name) {
return new Specification<Pupil>() {
@Override
public Predicate toPredicate(Root<Pupil> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
root = criteriaQuery.from(Pupil.class);
Join<Pupil, PupilInClassRoom> pupil_PupilInClassRoomJoin = root.join("pupilInClassRoom");
Join<PupilInClassRoom, Teacher> teacher_PupilInClassRoomJoin = pupil_PupilInClassRoomJoin.join("teacher");
return criteriaBuilder.equal(teacher_PupilInClassRoomJoin.get(Teacher_.Name),name);
}
};
}
}
是的,你的回答解决了我的问题)谢谢。你做得怎么样。加入(课堂)和。加入(老师)?我添加了元模型)
Join<Pupil, PupilInClassRoom> pupil_PupilInClassRoomJoin =
root.join("pupilInClassRoom");
Join<PupilInClassRoom, Teacher> teacher_PupilInClassRoomJoin =
pupil_PupilInClassRoomJoin.join("teacher");
public final class PupilSpecification {
public static Specification<Pupil> findPupilByTeacherSpecification(String name) {
return new Specification<Pupil>() {
@Override
public Predicate toPredicate(Root<Pupil> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
root = criteriaQuery.from(Pupil.class);
Join<Pupil, PupilInClassRoom> pupil_PupilInClassRoomJoin = root.join("pupilInClassRoom");
Join<PupilInClassRoom, Teacher> teacher_PupilInClassRoomJoin = pupil_PupilInClassRoomJoin.join("teacher");
return criteriaBuilder.equal(teacher_PupilInClassRoomJoin.get(Teacher_.Name),name);
}
};
}
}
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Teacher.class)
public abstract class Teacher_ {
public static volatile SingularAttribute<Teacher,String> name;
public static volatile SingularAttribute<Teacher,String> surmane;
public static volatile SingularAttribute<Teacher,String> discipline;
public static volatile SingularAttribute<BaseModel,Integer> id;
public static final String Name = "name";
public static final String Surname = "surname";
public static final String Discipline = "discipline";
public static final String Id = "id";
}
pupilRepository.findAll(PupilSpecification.findPupilByTeacherSpecification("Alla"))