java - 问 : JPA save() save other object

标签 java spring jpa kotlin spring-data-jpa

我想了解JAP Repotitoty的详细信息。 我创建了一个服务类、实体类和存储库类,如下所示(用 kotlin 编写)并执行了 ItemService#update 方法。

执行 item2Repository 的 save() 方法时,item1 和 item2 都会更新。

@Service
class ItemService(@Autowired private val item1Repository: Item1Repository, @Autowired private val item2Repository: Item2Repository) {

    fun update(id: Long) {

        val item1 = item1Repository.findById(1).get()
        item1.name = "updated!"

        val item2 = item2Repository.findById(1).get()
        item2.name = "updated!"

        // item1 and item2 were updated.
        item2Repository.save(item2)
    }
}


@Entity
@Table(name = "item1")
data class Item1(

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Long = 0,

        @Column
        var name: String = ""
)    

@Entity
@Table(name = "item2")
data class Item2(

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        val id: Long = 0,

        @Column
        var name: String = ""
)

interface Item1Repository: JpaRepository<Item1, Long>

interface Item2Repository: JpaRepository<Item2, Long>

为什么要更新 item1? 我认为执行 findById 方法时,item1 和 item2 都是在持久化上下文中进行管理的。 当我执行jpa存储库的save方法时,持久化上下文中存在的所有对象都会被保存吗?

最佳答案

由于它是“托管”实例,因此您不必调用 save 来保存它 - 对托管实例所做的所有更改都将反射(reflect)在数据库中。 为了防止这种行为,您必须分离该实例,使其像 POJO 而不是代理一样工作。

保存用于保留新实体或合并分离。

关于java - 问 : JPA save() save other object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53174640/

相关文章:

java - 你如何从Java中的声卡捕获声音?

java - 如何在运行时在不同的上下文中引用 Spring bean

java - JPA中如何查找非主键的列字段

Hibernate/JPA 将列映射到 Map 类型

java - ""和 ""之间有什么区别,我如何根据字符测试前者?

java - 包 org.codehaus.jettison.json 不存在

java - 过滤消息正文,我强制关闭

java - spring jdbctemplate 获取字节数组

java - 如何在 Hibernate 中用 TableGenerator 替换已弃用的 MultipleHiLoPerTableGenerator

jsf - javax.validation.ConstraintViolationException