[帮帮我。
为什么交易后实体中的集合发生变化?
我的实体:
@Entity
class Entity(
@Id
val uuid: UUID,
@OneToMany(cascade = [CascadeType.PERSIST, CascadeType.REMOVE])
@JoinTable(
name = "entities_items",
joinColumns = [JoinColumn(name = "entity_uuid")],
inverseJoinColumns = [JoinColumn(name = "item_uuid")]
)
val items: MutableList<Item>
)
我的案子:
@Test
fun will_added_item() {
val entityBefore = entityRepository.findById(entityId).get()
// entityBefore.items.size == 0
TransactionTemplate(transactionManager).execute { _ ->
val entity = entityRepository.findById(entityId).get()
entity.items.add(item)
}
// entityBefore.items.size == 1 <-- ???
val entityAfter = entityRepository.findById(entityId).get()
}
Spring Boot +休眠+ JUnit
这是因为当您多次通过事务中的ID检索项目时,Hibernate将为您提供相同的对象,因为它将事务中涉及的对象作为一个工作单元进行管理。
因此entityBefore和entity指向相同的对象。
[抱歉,请忽略-我发现第一次检索不在TX范围内!