Hibernate @OneToMany join table throws StackOverflowException

Я работаю над отношением сущности спящего режима, которое настраивается следующим образом:

Пользователь может создавать задания. Пользователь может разделить назначение с другими пользователями, задавая им задачи. Моя цель состоит в том, чтобы иметь пользователя, который выглядит следующим образом:

{id: 1, assignments: [{name: 'test'}], partialAssignment: [{task: 'bla'}]}

И присваивания вроде этого: {id: 1, user: {…}, assignUsers: [{…}], …}

Назначение:

@Entity @Table(name = "Assignment") data class Assignment ( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false, updatable = false) val id: Long? = null, @Column(name = "name") val name: String? = null, @Column(name = "dueDate") @Temporal(TemporalType.TIMESTAMP) val dueDate: Date? = null, @ManyToOne @JoinColumn(name = "userId") var user: User? = null, @OneToMany(mappedBy = "assignment") var assignedUsers: List<AssignmentUser> = emptyList() ) 

пользователь

 @Entity @Table(name = "Users") data class User ( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false, updatable = false) @JsonView(UserView.UserSummary::class) val id: Long? = null, @Column(name = "email", nullable = false) @JsonView(UserView.UserSummary::class) val email: String = "", @Column(name = "password", nullable = false) val password: String = "", @OneToMany(mappedBy = "user") val assignments: List<Assignment> = emptyList(), @OneToMany(mappedBy = "user") val partialAssignment: List<AssignmentUser> = emptyList() ) 

AssignmentUser

 @Entity @Table(name = "AssignmentUsers") data class AssignmentUser( @Column(name = "task") val task: String? = null, @Id @ManyToOne(cascade = arrayOf(CascadeType.ALL)) @JoinColumn(name = "userId") var user: User? = null, @Id @ManyToOne(cascade = arrayOf(CascadeType.ALL)) @JoinColumn(name = "assignmentId") var assignment: Assignment? = null ) : Serializable { } 

Когда я получаю класс Assignment с помощью вызова JPARepository .findOne (id), я получаю исключение StackOverflow в методе Assignment.toString (). Я не понимаю, почему, поскольку он работал нормально, пока я не добавил отношения psuedo ManyToMany (назначенныеUsers).

Есть предположения?

Здесь проблема не в восторге от @OneToMany.

В случае сериализации (в данном случае строковой формы объекта печати) указанный код будет проходить циклический цикл.

В указанных циклических взаимосвязях кода следующие: 1. Назначение имеет список 2. У присвоения есть Пользователь 3. Пользователь имеет список 4. У пользователя есть список 5. У AssignmentUser есть Пользователь 6. AssignmentUser имеет Assignment

В hibernate все сопоставления по умолчанию устанавливаются в LAZY, следовательно, это не вызовет проблемы, потому что мы не будем загружать связанные объекты, если это необходимо.

Но, в случае сериализации, он попытается загрузить связанные объекты, и, следовательно, чтобы сломать это, нам нужно реализовать пользовательскую сериализацию. В вашем случае вам необходимо переопределить метод toString над указанными выше объектами, т. Е. Объекты не должны загружаться без необходимости.