我在 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/