Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据JPA多通双向_Java_Spring_Hibernate_Spring Data Jpa - Fatal编程技术网

Java Spring数据JPA多通双向

Java Spring数据JPA多通双向,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,问题:在我尝试向数据库中添加学生OBEJCT之前,它一直有效,但表的创建是正确的。 我不能再简化这篇文章了。但它主要是不需要大量阅读的代码,它是一个简单的spring数据存储库服务模型。我发布这一切都是因为idk我做错了什么。问题在于JPA映射。 我从这里得到了这个例子 MDOELS @Entity public class Department { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private int

问题:在我尝试向数据库中添加学生OBEJCT之前,它一直有效,但表的创建是正确的。 我不能再简化这篇文章了。但它主要是不需要大量阅读的代码,它是一个简单的spring数据存储库服务模型。我发布这一切都是因为idk我做错了什么。问题在于JPA映射。 我从这里得到了这个例子

MDOELS

@Entity
public class Department {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    private String name;

    @OneToMany(mappedBy="department")
    private Collection<Student> students;

    public Department() {
    }

    public Department(String name) {
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String deptName) {
        this.name = deptName;
    }

    public Collection<Student> getStudents() {
        return students;
    }

    public void setStudent(Collection<Student> students) {
        this.students = students;
    }

    public String toString() {
        return "Department id: " + getId() +
                ", name: " + getName();
    }
}



@Entity
public class Student {
    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;
    private String name;

    @ManyToOne (cascade=CascadeType.ALL)
    private Department department;

    public Student() {
    }

    public Student(String name, Department department) {
        this.name = name;
        this.department = department;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }



    public Department getDepartment() {
        return department;
    }

    public void setDepartment(Department department) {
        this.department = department;
    }

    public String toString() {
        return "\n\nID:" + id + "\nName:" + name + "\n\n" + department;
    }
}

我不能完全理解你们的问题,但我想补充一点。添加操作的级联未实现或不完整。希望对您有所帮助。

您添加了cascade=CascadeType.ALL for Department in Student class,并将departments单独保存<代码>this.departmentService.addToDataBase(部门)

修理工:不要打电话

departmentService.addToDataBase(departments);

或者从Student中删除CascadeType.ALL

为什么每个人都在他们的示例中添加CascadeType,而当我添加它时,它会破坏一切?它没有破坏一切,您添加CascadeType并尝试管理部门。你混淆了两个概念。如果只添加级联,它应该可以工作。此外,如果您只与学生分开的部门合作(在保存学生时不要试图保存部门),那么它也应该起作用。您是否有这样的示例,即他们同时具有级联类型和管理的cacsadede实体?sbjavateam i首先添加部门,然后添加学生?在我的主要方法中,在主类中的示例中,保存了student-em.persist(student);但是部门没有相同的名称,没有em.persist(dept)。系作为studentWho的一部分创建,谁是关系的所有者?从学生到系的外键。有什么地方可以让我用JPACan学习spring boot数据吗?你可以把
@JoinColumn
添加到部门顶部吗?我可以邀请stackoverflow聊天一会儿,向我解释级联类型吗?在关系上使用级联类型注释,自动对其子关系实体执行插入删除等操作。
@Service
public class StudentService {
    private final StudentRepository studentRepository;

    @Autowired
    public StudentService(StudentRepository studentRepository) {
        this.studentRepository = studentRepository;

    }

    public void addToDatabase(Student student) {
        this.studentRepository.saveAndFlush(student);

    }

    public Student getStudentByName(String name) {
        return studentRepository.findByName(name);
    }
}
@Service
public class DepartmentService {
    private final DepartmentRepository departmentRepository;

    @Autowired
    public DepartmentService(DepartmentRepository departmentRepository) {
        this.departmentRepository = departmentRepository;

    }

    public void addToDataBase(List<Department> department) {
        this.departmentRepository.save(department);
        department.forEach(this.departmentRepository::saveAndFlush);
    }
    public Department getDepartmentByName(String name){
        return  this.departmentRepository.findByName(name);
    }
}
@Component
public class Terminal implements CommandLineRunner {
    private final StudentService studentService;
    private final DepartmentService departmentService;

    @Autowired
    public Terminal(StudentService studentService, DepartmentService departmentService) {
        this.studentService = studentService;
        this.departmentService = departmentService;
    }

        @Override
        public void run(String... strings) throws Exception {
            Department department = new Department("dep1");
            Department department1 = new Department("dep2");
            Department department2 = new Department("dep3");
            Department department3 = new Department("dep4");
            List<Department> departments = new ArrayList<>(Arrays.asList(department, department1, department2, department3));
            this.departmentService.addToDataBase(departments);
    //
            Student student = new Student("pesho", department);
            Student student11 = new Student("gosho", department1);
            this.studentService.addToDatabase(student11);
            this.studentService.addToDatabase(student);
            student = new Student("sasho", department2);
            this.studentService.addToDatabase(student);
    //        System.out.println(this.studentService.getStudentByName("gosho").getDepartment1());
    //        System.out.println("CHECKING ONE TO ONE BIDIRECTIONAL: " + this.departmentService.getDepartmentByName("dep1").getStudent());

        }
    }
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: app.models.Department
departmentService.addToDataBase(departments);