JPA:声明父实体仅使用共享主键更新子实体

时间:2020-10-22 23:50:12

标签: jpa

我有一个拥有一个孩子并与其共享主键的父母:

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考虑共享密钥,还是我必须自己编写安全检查代码?

0 个答案:

没有答案