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都是多人关系。谢谢,我将更新多人关系。