我有一个拥有一个孩子并与其共享主键的父母:
uint32_t
这种关系很好。子级通过父级持久化,更新和删除。主键已同步。
但是,JPA无法确保更新后的子级实际上具有与其父级相同的主键。因此,如果恶意请求要求更新
@Entity()
@Table(name = "Parent")
class Parent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long = 0
@OneToOne(cascade = [ALL], fetch = LAZY, mappedBy = "parent")
@PrimaryKeyJoinColumn
var child: Child? = null
}
@Entity()
@Table(name = "Child")
class Child {
@Id
@Column(name = "id")
var id: Long? = null
@Column
var name: String? = null
@OneToOne
@MapsId
@JoinColumn(name = "id")
var parent: Parent? = null
}
JPA确实更新了一个甚至不属于更新后的父级的子级。原始孩子1和其父对象1之间的关系虽然没有被触及,但孩子2也没有被触及。 这是一个安全问题,因为正确的更新一个父实例的请求会导致更新另一个父实例子。
是否可以通过更新子实体使JPA考虑共享密钥,还是我必须自己编写安全检查代码?