Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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 Hibernate@OneToMany@ManyToOne映射_Java_Hibernate - Fatal编程技术网

Java Hibernate@OneToMany@ManyToOne映射

Java Hibernate@OneToMany@ManyToOne映射,java,hibernate,Java,Hibernate,每个人我都有一个关于使用注释的问题@OneToMany/@ManyToOne;是否可以在此模型中创建一个包含两组主题的用户模型(针对教师和参与学生进行),而不是创建单独的学生和教师模型?我写了这样一个代码,但是当我想要获取关于项目和用户的数据时,hibernate会崩溃“堆栈溢出”错误 用户实体: @Entity public class User{ @OneToMany( mappedBy = "student", cascade = C

每个人我都有一个关于使用注释的问题
@OneToMany
/
@ManyToOne
;是否可以在此模型中创建一个包含两组主题的用户模型(针对教师和参与学生进行),而不是创建单独的学生和教师模型?我写了这样一个代码,但是当我想要获取关于项目和用户的数据时,hibernate会崩溃“堆栈溢出”错误

用户实体:

@Entity
public class User{
    @OneToMany(
            mappedBy = "student",
            cascade = CascadeType.ALL,
            fetch = FetchType.EAGER,
            orphanRemoval = true
    )
private Set<Item> items = new HashSet<>();

    @OneToMany(mappedBy = "teacher",
            cascade = CascadeType.ALL,
            fetch = FetchType.EAGER,
            orphanRemoval = true
    )
private Set<Item> carriedItems= new HashSet<>();
}
//id and other data

感谢@Leviand的帮助,根据您的评论,您的代码和逻辑似乎需要重新编写。 首先,使用两个专用类代替
Item
pojo:

@Entity
@Table(name = Studend) // I'm guessing a table name
public class Student{
    @JoinColumn(name = "student_id", nullable = false)
    private User user;
}

@Entity
@Table(name = Teacher) // I'm guessing a table name
public class Teacher{
    @JoinColumn(name = "teacher_id", nullable = false)
    private User user;
}
然后,由于
用户
只能连接到单个
教师
学生
,因此,请将其重构为:

@Entity
@Table(name = User) // I'm guessing a table name
public class User{
    @OneToOne(
            mappedBy = "student",
            cascade = CascadeType.ALL,
            fetch = FetchType.EAGER,
            orphanRemoval = true
    )
    private Student student;

    @OneToMany(mappedBy = "teacher",
            cascade = CascadeType.ALL,
            fetch = FetchType.EAGER,
            orphanRemoval = true
    )
    private Teacher teacher;
}

希望这有帮助:)

为什么你要创建一个通用的
项目
类而不是
学生
教师
类?我想知道这是否是一个更好的解决方案,因为用户有角色(“教师”或“学生”)如果我创建了教师和学生实体角色,那么就不需要第二个问题:一个用户怎么可能连接到多个教师/学生?这是正确的吗?嗯,那么最好是使用FK连接它?此外,如果我创建学生和教师,那么我必须创建不同的存储库、服务等。下一个问题是日志记录,如果我没有角色,如何识别谁被记录。我使用Spring ReTiTts帮助了一点,但是我认为NAD是模型数据库:如果你的数据库看起来像那个图像,我所发布的代码是正确的:
@Entity
@Table(name = User) // I'm guessing a table name
public class User{
    @OneToOne(
            mappedBy = "student",
            cascade = CascadeType.ALL,
            fetch = FetchType.EAGER,
            orphanRemoval = true
    )
    private Student student;

    @OneToMany(mappedBy = "teacher",
            cascade = CascadeType.ALL,
            fetch = FetchType.EAGER,
            orphanRemoval = true
    )
    private Teacher teacher;
}