程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ManyToOne 映射和 findBySchoolId大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决ManyToOne 映射和 findBySchoolId?

开发过程中遇到ManyToOne 映射和 findBySchoolId的问题如何解决?下面主要结合日常开发的经验,给出你关于ManyToOne 映射和 findBySchoolId的解决方法建议,希望对你解决ManyToOne 映射和 findBySchoolId有所启发或帮助;

我正在尝试创建教师和学校对象,其中一所学校可以有多名教师,但每位教师都在一所学校工作。我想通过将 ID 作为参数来查询,我只得到在特定学校工作的教师。

学校对象

@Getter
@Setter
@Entity
@table(name="school")
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class School {
    @ID
    @SequenceGenerator(
            name = "school_sequence",sequencename = "school_sequence",al@R_696_5352@nSize = 1
    )
    @GeneratedValue(
            strategy = GenerationType.SEQUENCE,generator = "school_sequence"
    )
    @column(name="ID")
    private Long ID;
    private String name;

    @JsonIgnore
    @OnetoMany//(mappedBy = "school")
    private List<Teacher> teacher;
}

教师对象

@Getter
@Setter
@Entity
@table(name="teacher")
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Teacher {
    @ID
    @SequenceGenerator(
            name = "teacher_sequence",sequencename = "teacher_sequence",generator = "teacher_sequence"
    )
    @column(name="ID")
    private Long ID;
    private String name;
    private String email;
/*    @column(name="schoolID")
    private Long schoolID;*/

    //(cascade = CascadeType.ALL) Don't use this! it will prevent you to have different teacher querIEs with
    @manyToOne(fetch = FetchType.LAZY)
    @Joincolumn(name = "schoolID",referencedcolumnname = "ID")    //the same school IDs.
    private School school;

}

教师控制器

@RestController
@requestMapPing(path = "API/v1/teacher")
public class TeacherController {

    private final Teacherservice teacherservice;

    @autowired
    public TeacherController(Teacherservice teacherservicE) {
        this.teacherservice = teacherservice;
    }


    @GetMapPing
    public List<Teacher> getTeacher(){
        return teacherservice.getTeacher();
    }

    @GetMapPing(path = "schoolID")
    public List<Teacher> getTeacherBySchool(@PathVariable("schoolID") Long schoolID,School school){
        return teacherservice.getTeacherBySchool(schoolID,school);
    }

教师服务

@service
public class Teacherservice {
    private final TeacherRepository teacherRepository;

    @autowired
    public Teacherservice(TeacherRepository teacherRepository) {
        this.teacherRepository = teacherRepository;
    }


    public List<Teacher> getTeacher(){
        return teacherRepository.findAll();
    }

    //public List<Teacher> getTeacherBySchool

我将如何在教师控制器和教师服务上实现这一点?

更新我的进度!!!

教师控制器

@GetMapPing(path = "/teachers/{schoolID}")
public List<Teacher> getTeacherBySchool(@PathVariable("schoolID") Long schoolID){
    School school = new School();
    school.setID(schoolID);
    return teacherservice.getTeacherBySchool(school);
}

教师服务

   public List<Teacher> getTeacherBySchool(Long schoolID){
            return teacherRepository.findBySchool(school);
}

教师资料库

@Repository
public interface TeacherRepository extends JpaRepository<Teacher,Long> {

    @query
    List<Teacher> findBySchool(List<School> school);

这些改变做了我想让他们做的,但正如我所说。这不是一个好的编码习惯。我想要的是在 TeacherController 上减少代码,并使我的 Teacherservice 与 Schoolservice 通信以获得合适的学校。

解决方法

我认为您可以将以下内容添加到您的存储库中:

public List<Teacher> findBySchoolId(Long schoolId);

或者自己编写查询:

entitymanager.createQuery("FROM Teacher t WHERE t.school.id = :schoolId")
    .setParameter("schoolId",schoolId)
    .getResultList();

大佬总结

以上是大佬教程为你收集整理的ManyToOne 映射和 findBySchoolId全部内容,希望文章能够帮你解决ManyToOne 映射和 findBySchoolId所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: