我正在使用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时它总是尝试更新记录,因为它不在db,没有任何反应。
我调试代码并看到它使用 SimpleKeyValueRepository 获取 id 字段 id ,因此它总是得到一个值和尝试更新记录,我可以覆盖此行为以使用 dbId 而不是 id 字段吗?有没有办法实现相同的配置或注释,任何帮助非常感谢。
答案 0 :(得分:0)
每个实体必须只有一个@Id
。另一方面,您可能希望将列声明为unique
。它可以通过以下方式完成:
@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
。
如果您需要进一步澄清或者您的环境更复杂,请在下面的评论部分询问。