使用Sequence Primary键为其他列生成值



我正在寻找解决方案,使用序列键来构建其他列的值。

说,例如,我有一个序列主键字段"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());
    ...
}

注::我没有编译这段代码,所以这可能容易出错

相关内容

  • 没有找到相关文章

最新更新