Здравствуйте! Столкнулся с проблемой при сохранении сущности A
вместе с добавленными сущностями B
. При попытке сохранить сущность A
, в которой были добавлены новые объекты B
, возникает ошибка, и сохранение не происходит.
@JmixEntity
@Table(name = "B")
@Entity(name = "B")
open class B {
@OnDeleteInverse(DeletePolicy.CASCADE)
@JoinColumn(name = "A_ID", nullable = false)
@ManyToOne(fetch = FetchType.LAZY, optional = false)
var a: A? = null
...
@JmixEntity
@Table(name = "A")
@Entity(name = "A)
open class A {
...
@Composition
@OnDelete(DeletePolicy.CASCADE)
@OneToMany(mappedBy = "a", cascade = [CascadeType.MERGE])
var bList: MutableList<B> = NotInstantiatedList()
}
В DetailView сущности A
я добавил вкладку с DataGrid
, чтобы можно было управлять связанными объектами B
:
<tab id="bTab">
<vbox spacing="true" padding="false" maxHeight="100%">
<hbox id="buttonsPanel" classNames="buttons-panel">
<button id="addBtn" action="bDataGrid.add" themeNames="primary"/>
<button id="editBtn" action="bDataGrid.edit"/>
<button id="removeBtn" action="bDataGrid.remove"/>
</hbox>
<dataGrid id="bDataGrid"
minHeight="50em"
dataContainer="bDc"
columnReorderingAllowed="true">
<actions>
<action id="add" type="list_add"/>
<action id="edit" type="list_edit"/>
<action id="remove" type="list_remove"/>
</actions>
<columns resizable="true">
<column property="x" autoWidth="true"/>
<column property="y" autoWidth="true"/>
</columns>
</dataGrid>
</vbox>
</tab>
В коде экрана сущности А
я реализовал добавление новой сущности B
следующим образом:
@Subscribe("bDataGrid.add")
private fun onBDataGridAdd(event: ActionPerformedEvent) {
val B = dataManager.create(B::class.java)
b.a = editedEntity
val window = dialogWindows.detail<B, BDetailView>(bDataGrid)
.withViewClass(BDetailView::class.java)
.editEntity(b)
.build()
window.setSizeFull()
window.open()
}
Как правильно организовать сохранение сущностей B
вместе с сущностью A
, чтобы не возникало ошибок?