我正在寻找使用Sequence键构建其他列值的解决方案。
比如说,我的实体类中有一个序列主键字段“Id”和其他字段名“ex_Id”。
主键ID将在持久性过程中自动生成,但我想知道如何设置我的“ex_Id”。因为需要使用相同的主键也是其中的一部分。
示例:
ID - 123456
ex_Id - EX_ID_123456
我们有任何注释来实现这一目标吗?所以我可以在坚持之前作为实体本身的一部分来做。
答案 0 :(得分:0)
这是我提出的一个快速黑客:
您必须创建一个单独的实体来保存将为您完成所需工作的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());
...
}
P.S。:我没有编译这段代码,所以这可能容易出错。