Spring 使用当前年份和分配的ID初始化字段
我有一个我一直坚持的实体。当通过Spring存储库将其存储到数据库中时,会自动分配其ID。 在同一个实体中,我有一个从Id和当前年份生成的字段:Spring 使用当前年份和分配的ID初始化字段,spring,hibernate,jpa,Spring,Hibernate,Jpa,我有一个我一直坚持的实体。当通过Spring存储库将其存储到数据库中时,会自动分配其ID。 在同一个实体中,我有一个从Id和当前年份生成的字段:“-” 在一个用@PrePersist注释的方法中,尚未分配ID,因此我在@pospersist方法中编写了一些代码: @PostPersist protected void setupOrderNumber() { this.orderNumber = Calendar.getInstance().get(Calendar.YEAR) + "-
“-”
在一个用@PrePersist
注释的方法中,尚未分配ID,因此我在@pospersist
方法中编写了一些代码:
@PostPersist
protected void setupOrderNumber() {
this.orderNumber = Calendar.getInstance().get(Calendar.YEAR) + "-" + id;
}
此代码不会将orderNumber
存储到数据库中,因为实体已存储。
我如何通过JPA直接在实体内实现这样的结果
如果JPA不可能,我可以使用Hibernate和
@Formula
注释,但我不确定如何编写:@Formula(“提取(从当前日期算起的年份)+'-'+id”)
似乎不起作用。正如您已经注意到的那样:在@PrePersist
中,生成的ID不可用-只是因为在保存到数据库中之后设置了ID。并且不会持久化在@PostPersist
中所做的任何更改,因为持久化已经发生了
只要不需要数据库中的值,就可以使用@公式。但是我不会使用extract(从当前日期算起的年份)
——因为这会在年份发生变化时改变orderNumber
——这与您使用@PostPersist
的实验有什么不同
而是使用一个年份字段,您可以在@PrePersist
中初始化该字段,并在公式中引用该字段:
@Entity
public class MyEntity {
@Id
@GeneratedValue(...)
private Long id;
private int year;
@Formula("concat(id, '-', year)")
private String orderNumber;
@PrePersist
private void prePersist() {
this.year = Calendar.getInstance().get(Calendar.YEAR);
}
@PostPersist
private void postPersist() {
this.orderNumber = id + "-" + year;
}
}
我还初始化了postPersist()
中的orderNumber
,以便在EntityManager.persist()之后立即有一个有效值