如何在一次查询中正确地从数据库中删除一条记录?JPA

yqlxgs2m  于 2023-01-31  发布在  其他
关注(0)|答案(2)|浏览(189)

如何在一个查询中正确地从数据库中删除记录。例如,当实体使用@MapsId注解来使用父实体的主键时,如果父条目被删除,它将保证父条目的ID在子实体中使用。
代码示例:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long id;
    private String name;
}

@Entity
public class UserDetails {
    @Id
    private long id;
    private String phone;
    @OneToOne(fetch = FetchType.LAZY)
    @MapsId
    private User user;
}

在这里,当使用JpaRepository删除方法删除用户时,将发生UserDetail使用主键User的错误

f87krz0w

f87krz0w1#

首先,您确定关系的方向是有意义的吗?我希望它是相反的,因为用户ID和名称似乎是您更经常需要的更基本的信息。
其次,您所做的似乎是优化性能的尝试,因为您也可以将所有数据存储在单个实体中。您确定优化会带来回报吗?(我猜不会。)参见Premature Optimization
第三,* 如果 * 关系是相反的,您可以将注解修改为@OneToOne(cascade=CascadeType.DELETE)@OneToOne(cascade=CascadeType.ALL),以便让JPA在删除第一个实体时自动删除另一个实体。

cld4siwp

cld4siwp2#

为此,您需要删除所有由主键使用的外键
或使用级联
之后使用以下内容
在JPA中,我们可以使用deleteById
通过命名查询
从ID =?1的员工中删除
我的本机查询
从id =?1的员工中删除

相关问题