实体管理器更改分离的实体

问题描述 投票:0回答:1

[帮帮我。

为什么交易后实体中的集合发生变化?

我的实体:

@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

spring jpa testing kotlin entitymanager
1个回答
0
投票
  • 请忽略此错误答案-似乎无法在我的手机上将其删除!

这是因为当您多次通过事务中的ID检索项目时,Hibernate将为您提供相同的对象,因为它将事务中涉及的对象作为一个工作单元进行管理。

因此entityBefore和entity指向相同的对象。

[抱歉,请忽略-我发现第一次检索不在TX范围内!

© www.soinside.com 2019 - 2024. All rights reserved.