【发布时间】:2017-03-10 07:33:33
【问题描述】:
我有一个订阅者实体,它使用用户提供的电子邮件地址作为主键,而不是自动生成的值。这意味着当调用JpaRepository的save方法时,主键值是not null。
Spring 数据 JPA documentation 第 2.2.1 节表 2.2 说明如下:
默认情况下,Spring Data JPA 检查给定的 Id-Property 实体。如果 Id-Property 为空,则实体将被假定为 新的,否则视为不是新的。
这种行为会阻止新的订阅者实体被持久化到数据库中。
【问题讨论】:
-
不应该。当 repo 看到 ID 存在于输入实体中时,它将在内部调用
EntityManager.merge(),它仍应保存您的实体。您只需要记住将repository.save()的返回值作为托管实体 -
@AdrianShum 你是对的。现在可以了。但是,未检测到重复项。如果我尝试两次保存同一个实体,第二次它不会给出重复的异常,因为我使用自动生成的密钥。而是更新了同一个实体,这不是我想要的。
标签: java spring spring-data spring-data-jpa