java - JPA - 可以将 id 默认为 0 吗?

标签 java jpa hashcode

我有一个带有自动递增 ID 的简单实体。

@Entity
public class MyEntity implements Serializable
{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long    id;

这有一个为我生成的 hashCode 方法。

@Override
public int hashCode()
{
    return (int) (id ^ (id >>> 32));
}

问题是我正在尝试向此类添加审计,但它在实体持久化之前调用 hashCode,因此 id 为空。

我的解决方案(有效)是将 id 初始化为 0,直到它可以在 persist 上获得正确的值。

private Long    id = 0L;

问题是这是否可以接受?我担心的是更改 hashCode 不好,但它必须比 NPE 更好?

最佳答案

您应该修复您的 hashCode 以处理空值。 如果您将 id 设置为 0,则它不会在持久化时更改。

关于java - JPA - 可以将 id 默认为 0 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29157579/

相关文章:

c# - 为什么具有相同元素的 HashSet 在调用 GetHashCode() 时返回不同的值?

java - HashSet中是否可以输入重复的值?

java - 使用 JPA 持久保存 PK 对象(ManyToMany)

java - Spring Data JPA - 是否可以在将实体保留在存储库中之前使用主体更新实体?

Java重写继承的方法

java - Spring Boot Jackson ResponseEntity 找不到类的序列化器

java - em.merge() 没有保存到数据库

java - 哪个 eclipse 包与 google app engine 一起使用?

java - Hibernate - 删除对象

hashcode - Lombok.hashCode 问题为 "java.lang.StackOverflowError: null"