java - Spring boot - 在保存对象时根据id字段保存非id字段

标签 java hibernate jpa

我在 spring 引导类中有一个自动递增的 id 字段:

private long id //or it can be int, does not matter

我在同一个类中还有另一个字段,它必须是唯一的和字母数字的:

private String code;

此字段将有 6 个字母数字(大写或小写无关紧要)。

是否可以使用这种方法在为该类创建新对象时自动保存该字段?

Long.toString("id_field_value",36);

实际上,它给出了:

0 -> 0
1 -> 1
10 -> A

因此,当创建第一个对象时,id 将为 1。

有什么建议吗?

例如,当我保存Person对象时,

使用 JPA - hibarnate,id 将自动为 1。

我还希望自动保存另一个字段,这取决于 id 字段。

所以,id是1,那string code也一定是1。

我应该在创建对象后执行此操作吗?喜欢:

Person person = personRepository.save(person3); person.setCode(person.getId().toString);//或其他函数

最佳答案

您可以尝试使用 @PostPersist 注解。一旦持久化,您的实体中就会有一个 id。像这样的东西:

@PostPersist
private void postPersist() {
    this.setCode( generateMyCode( getId() ) );
}

只要使用 EntityManager 就可以正常工作,字段代码也应该保存到数据库中。

当使用 Spring 存储库时,可能需要在初始保存后执行额外的 save()(我不必这样做,只有默认配置),但您应该使用您的配置测试此方法。

(与使用 EntityManager 的 JPA 标准用法相比,Spring 存储库处理持久性上下文的方式略有不同。)

关于java - Spring boot - 在保存对象时根据id字段保存非id字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53283009/

相关文章:

java - 为什么 Maven 找不到这个 jar

java - Spring JPA @ManyToOne 保存因重复 key 而失败

java - 使用spring工具套件中的jpa工具生成涉及外键和复合主键的实体后​​运行服务器时出现异常

java - android SELECT MAX 不起作用

java - MongoDB:java中的提示索引

java - 从字符串精确分配给 Float

hibernate - Hibernate 3.5 中的 @OrderColumn 注释

java - 2个表选择什么关系

java - 使用单表继承对子类进行 JPA 查询

java - JSON 在发布时递归调用对象