java - 覆盖 Spring 数据 JPA id 注释。

标签 java spring spring-data-jpa

我正在使用 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/

相关文章:

java - 将主键作为外键映射到另一个表

java - 如何从 Java 中分配给它们的值中检索枚举常量?

javascript - Spring Boot 加 React 部署为 .war

mysql - JpaRepository保存值总是返回null

java - Hibernate @OneToMany 映射给出异常,

java - 如何从一个 servlet 访问另一个 servlet 中创建的对象

java - 将大规模、结构不良的 Java 系统迁移到 Spring 应用程序框架

java - Spring mvc hibernate jsp问题

Spring Hadoop : Reading generic option

MySQL/JPA 字段没有默认值错误,即使该字段位于类层次结构中的不同类中