问:JPA save()保存其他对象



我想知道日本回购的详细信息。我创建了一个服务类、实体类和存储库类,如下所示(用kotlin编写(,并改进了ItemService#更新方法。

当执行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>

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

由于它是"托管"实例,您不必调用save来保存它——对托管实例所做的所有更改都将反映在数据库中。为了防止这种行为,您必须分离该实例,使其表现得像POJO而不是代理。

保存用于persist新实体或已分离的merge

最新更新