【问题标题】:Auto generate number spring boot jpa hibernate annotation gives always null value自动生成数字 spring boot jpa hibernate 注释总是给出空值
【发布时间】:2020-12-14 09:33:02
【问题描述】:

我想在我的字符串 ID 之外有一个唯一的数字。 所以我想我可以使用 Generated from Hibernate 但该值始终为 null。

我的实体:

@Entity(name = "user")
public class UserEntity {
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid")
    @Column(updatable = false, nullable = false)
    private String id;

    ....

    @org.hibernate.annotations.Generated(GenerationTime.ALWAYS)
    @Column(name = "identifier_id", insertable = false, updatable = false)
    private Long identifierId;
 }

有人可以帮帮我吗?

【问题讨论】:

  • 也许this 的回答会有所帮助。
  • 谢谢。但这意味着我需要用一个sql文件来创建这个表吗?不能通过JPA自动生成吗?
  • 看起来是的。老实说,我不使用自动模式生成,正如documentation 中所建议的那样,这不像增量迁移脚本那样灵活:虽然自动模式生成对于测试和原型设计非常有用,但在生产中环境中,使用增量迁移脚本管理架构更加灵活。
  • 是否有另一种方法可以为该实体生成独特的东西,而无需通过数据库进行操作?
  • 在官方文档中您可以找到如何使用 java UUID 生成器docs.jboss.org/hibernate/orm/5.4/userguide/html_single/…。你可以为 Long 自己做同样的事情。这个baeldung.com/hibernate-identifiers#5-custom-generator 可以帮助你(只是不要去数据库并自己生成 Long randomply)。它会让你不用去数据库生成

标签: java spring-boot hibernate jpa


【解决方案1】:

感谢德米特里。

我解决了这个问题:

@GeneratorType(type = UUIDGenerator.class, when = GenerationTime.INSERT)
@Column(name = "identifier_id")
private String identifierId;


public class UUIDGenerator implements ValueGenerator<String> {
    public String generateValue(Session session, Object owner) {
        return UUID.randomUUID().toString().replace("-", "");
    }
}

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 2023-02-17
    • 2019-06-25
    • 1970-01-01
    • 2021-09-15
    相关资源
    最近更新 更多