我正在使用 Spring-data-Jpa,我有一个实体
@Entity(name="person")
public class Person implements Serializable {
@javax.persistence.Id
private long dbId;
@Id
private final String id;
// others attributes removed
}
在上面的类中,我有两个不同的 id id (用 org.springframework.data.annotation.Id 标记)和 dbId(用 javax.persistence.Id 标记),因为我的 id 字段始终填充有唯一标识符(对于我从其他地方获取的 Person 类),所以在使用 Spring JpaRepository 时,它总是尝试更新记录,因为它不在数据库中,所以什么也没有发生.
我调试了代码,发现它使用 SimpleKeyValueRepository 获取 id 字段,即 id,因此它总是获取一个值并尝试更新记录,我可以覆盖此行为以使用 dbId 而不是 id 字段吗?有什么方法可以通过某些配置或注释来实现相同的目的,非常感谢任何帮助。
最佳答案
每个实体必须恰好有一个@Id
。另一方面,您可能希望将列声明为唯一
。可以通过以下方式完成:
@Entity(name="person")
public class Person implements Serializable {
@Id
private Long id;
@Column(unique = true)
private final String uuid;
// others attributes removed
}
还请记住,Spring Data JPA id 应该是引用 Long
而不是基元,因为您想要使用 id = null
保存对象。
String id
可能应该是 String uuid
并初始化为 String uuid = UUID.randomUUID().toString();
类似的情况是用户的独特电子邮件要求。一方面,它将是主键,但另一方面,您不会将其标记为 @Id
。
如果您需要进一步说明或者您的环境更复杂,请在下面的评论部分中询问。
关于java - 覆盖 Spring 数据 JPA id 注释。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44407243/