StackOverflowError с двунаправленными ссылками JPA в КотлинеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 StackOverflowError с двунаправленными ссылками JPA в Котлине

Сообщение Anonymous »

У меня есть следующие классы данных:

Код: Выделить всё

@Entity
@Table(name = "SECTIONS")
data class Section(

@Id @GeneratedValue
@Column(name = "ID")
var id: Long = 0,

@Column(name = "NAME")
var name: String = "",

@OneToMany(
mappedBy = "section",
fetch = FetchType.EAGER,
cascade = arrayOf(CascadeType.ALL),
orphanRemoval = true
)
var fields: MutableList = mutableListOf()
)

@Entity
@Table(name = "FIELDS")
data class Field(

@Id @GeneratedValue
@Column(name = "ID")
var id: Long = 0,

@Column(name = "NAME")
var name: String = "",

@ManyToOne
@JoinColumn(name = "SECTION_ID")
var section: Section? = null
)
Как видите, между разделом и полем существует двунаправленное сопоставление. Когда я создаю объект «Раздел», объект «Поле» и добавляю объект «Поле» в список полей объекта «Раздел», он работает нормально. Однако, когда я также устанавливаю ссылку на раздел поля на объект раздела и затем сохраняю его, я получаю StackOverflowError:

Код: Выделить всё

@Test
fun testCascadeSaving() {
val section = Section(name = "Section 1")
val field = Field(name = "Field 1")

section.fields.add(field)
field.section = section

val savedSection = sectionRepository.save(section)
val savedField = savedSection.fields[0]

// This causes an StackOverflowError
val f = fieldRepository.findOne(savedField.id)
}
Мне нужно прокомментировать строку field.section =section, чтобы приведенный выше код работал правильно.


Есть идеи, почему установка двунаправленной связи вызывает эту ошибку?

Подробнее здесь: https://stackoverflow.com/questions/471 ... -in-kotlin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»