我有两个字段的实体和id和代码......
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@Basic
@Column(name = "code", nullable = false)
private String code;
我想要做的是,根据自动递增的id(使用Mysql作为DB)生成代码。
有没有办法不使用表来为代码列生成密钥。 即
我设法做到这一点的唯一方法是使用下面的脚本。我不太确定这是正确的方法。
getEntityManager().persist(myEntity);
getEntityManager().flush();
myEntity.setCode(myEntity.getCode()+myEntity.getId());
getEntityManager().merge(myEntity);
提前致谢! 迪米特里
答案 0 :(得分:2)
看起来很好。您也许可以将其移动到@PostPersist
处理程序。
答案 1 :(得分:1)
您可以使用@GenericGenerator
注释创建自定义序列生成器。这是特定于Hibernate,但已知在JPA中工作。
@Id
@GeneratedValue(generator="custom-code-generator")
@GenericGenerator(name="custom-code-generator", strategy = "classname-of-generator",
parameters={...annotated parameters like the sequence name can be specified here ...})
@Column(name = "id")
private Integer id;
该策略将在实现PersistentIdentifierGenerator
接口的类中实现,并且如API文档中所述,自定义生成器还将实现Configurable
接口以允许配置生成器。
使用@PostPersist
注释也可以,因为在刷新EntityManager或者提交与EntityManager关联的事务之前,Id不会刷新到数据库。
答案 2 :(得分:0)
您可以尝试@PostPersist
:
class EntityClass {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
@Basic
@Column(name = "code")
private String code;
@PostPersist
public void generateCode() {
code = ("M-000-" + id);
}
}