我在Spring Boot类中有一个自动增量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
对象时,
id
在JPA-hibarnate中将自动为1。
我也希望自动保存另一个字段,这取决于id
字段。
因此,id为1,则string code
也必须为1。
创建对象后应该这样做吗?喜欢:
人员person = personRepository.save(person3); person.setCode(person.getId()。toString); //或其他功能
答案 0 :(得分:1)
您想要的code
列似乎恰好是id
列,但是具有另一种编码(以36为底,而不是以10为底)。
您不需要存储它,也不需要为此使用持久性注释:
getCode()
值进行计算的getter方法id
。答案 1 :(得分:1)
您可以尝试使用@PostPersist
注释。持久化后,您的实体中就会有一个ID。像这样:
@PostPersist
private void postPersist() {
this.setCode( generateMyCode( getId() ) );
}
只要使用EntityManager
,此方法就可以正常工作,该域代码也应保留在数据库中。
在使用Spring存储库时,可能需要在初始保存后执行额外的save()
(我不必这样做,只需使用默认配置),但是您应该在配置中测试这种方法。
(与使用EntityManager
的JPA标准用法相比,Spring存储库处理持久性上下文的方式有些不同。)