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 над указанными выше объектами, т. Е. Объекты не должны загружаться без необходимости.

Intereting Posts
Условные побочные эффекты и дополнительные типы в Котлине Создание экземпляра прослушивателя интерфейса в Котлине Как Lazy Инициализировать с параметром в Kotlin Список Котлина отсутствует «добавить», «удалить» и т. Д.? gradle multi-project: каталог сборки появляется в корневом каталоге, содержащем артефакты Котлина Glide onLoadFailed () триггер после загрузки всего изображения после прокрутки вниз, а затем прокрутки вверх Презентатор MVP неправильно введен Изменение высоты списка элементов при установке элемента изображения Проблемы, определяющие оператор equals () Kotlin coroutines CalledFromWrongThreadException Json to Kotlin Класс данных Не понимаю, как сделать подписку на флюс, работающую в Котлине Функция возврата объекта внутреннего класса RegisterResGeneratingTask устарел, используйте registerGeneratedFolders (FileCollection) Любое улучшение кода при добавлении / замене фрагмента