我正在寻找解决方案,使用序列键来构建其他列的值。
说,例如,我有一个序列主键字段"Id"和其他字段名称"ex_Id"在我的实体类。
主键id将在持久化过程中自动生成,但我想知道如何设置我的"ex_Id"。因为需要有相同的主键也是它的一部分。
的例子:
Id - 123456
ex_Id - EX_ID_123456
我们有任何注释来实现这一点吗?所以我可以在持久化之前把它作为实体本身的一部分
这是我想到的一个快速hack:
你必须创建一个单独的实体来保存你的Ex_Id
,它将为你做所需的工作:
@Entity
public class ExId {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String ex_Id;
public setExId(long primaryKey) {
this.ex_Id = Integer.toString(this.id) + "_" + Long.toString(primaryKey);
}
@Override
public String toString() {
return this.ex_Id;
}
}
这是使用上述类的主要实体:
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToOne (cascade = CascadeType.ALL)
private ExId ex_id;
...
public setExId() {
this.ex_Id.setExId(this.id);
}
}
现在,正如您所知道的,@Id
的生成值将在保存实体时创建,因此您需要首先保存该实体,然后使用返回的@Id
,您可以执行所需的工作。
public static void main(String[] args) {
...
session.save(myEntity);
myEntity.setExId();
session.update(myEntity.getExId());
...
}
注::我没有编译这段代码,所以这可能容易出错