Java 休眠递归对象

Java 休眠递归对象,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,我正在使用Java8和Spring4.3.1.RELEASE、JPA2和Hibernate5.2.1.Final和MySQL +-----+ +-------------+ +----------+ +------------------------+ | Job | | Person_Job | | Person | | Person_job_favourites | +-----+ +-------------+ +-----

我正在使用
Java8
Spring4.3.1.RELEASE
JPA2
Hibernate5.2.1.Final
MySQL

+-----+     +-------------+    +----------+     +------------------------+
| Job |     |  Person_Job |    |  Person  |     |  Person_job_favourites |
+-----+     +-------------+    +----------+     +------------------------+
|  ID |     |    PER_ID   |    |    ID    |     |       PER_ID           |
|     |     |    JOB_ID   |    |          |     |       JOB_ID           |
+-----+     +-------------+    +----------+     +------------------------+
我有一个
作业
对象<代码>作业包含一个
人员
对象。
Person
对象有一个
喜爱的工作列表

Job.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.EAGER)
@JoinTable(name = "person_job", joinColumns = {
        @JoinColumn(name = "JOB_ID", referencedColumnName = "ID", unique = true) }, inverseJoinColumns = {
                @JoinColumn(name = "PER_ID", referencedColumnName = "ID") })
private Person person;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "person_job_favourites", joinColumns = {
        @JoinColumn(name = "PER_ID", referencedColumnName = "ID") }, inverseJoinColumns = {
                @JoinColumn(name = "JOB_ID", referencedColumnName = "ID", unique = true) })
private Set<Job> favouriteJobs;
Person.java

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne(fetch = FetchType.EAGER)
@JoinTable(name = "person_job", joinColumns = {
        @JoinColumn(name = "JOB_ID", referencedColumnName = "ID", unique = true) }, inverseJoinColumns = {
                @JoinColumn(name = "PER_ID", referencedColumnName = "ID") })
private Person person;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "person_job_favourites", joinColumns = {
        @JoinColumn(name = "PER_ID", referencedColumnName = "ID") }, inverseJoinColumns = {
                @JoinColumn(name = "JOB_ID", referencedColumnName = "ID", unique = true) })
private Set<Job> favouriteJobs;
@Id
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(name=“person\u job\u favorites”,JointColumns={
@JoinColumn(name=“PER_ID”,referencedColumnName=“ID”)},inverseJoinColumns={
@JoinColumn(name=“JOB\u ID”,referencedColumnName=“ID”,unique=true)})
私人的工作;
如您所见,存在递归,结果集爆炸

问题


我希望不必完全重新设计我的模式,因为我已经围绕这个做了很多开发。有没有办法在特定点停止递归?i、 e.当我查询
Job
对象时,返回
Person
对象及其
Job
收藏夹,但是那些
Job
收藏夹不包含
Person
对象。

收藏夹作业不应该是多个关系吗?否则,一份工作只能是一个人的最爱,这对我来说并不合适。是的,你是对的,我会更新。谢谢。我希望您通过在表中添加一列
favorite
来销毁您的
Person\u-job\u-favorites
表并转换您的
Person\u-job
;因为夫妻
每个ID
+
工作ID
是唯一的,所以你可以将其标记为最喜欢的或不喜欢的。顺便说一下,JOB=>Person和Person=>JOB都是多人关系。谢谢,我将更新多人关系。favoriteJobs不应该是多人关系吗?否则,一份工作只能是一个人的最爱,这对我来说并不合适。是的,你是对的,我会更新。谢谢。我希望您通过在表中添加一列
favorite
来销毁您的
Person\u-job\u-favorites
表并转换您的
Person\u-job
;因为夫妻
PER\u ID
+
JOB\u ID
是唯一的,所以您可以将其标记为最喜欢的或不喜欢的。顺便说一句,JOB=>Person和Person=>JOB都是多人关系。谢谢,我将更新多人关系。