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

时间:2016-07-05 18:22:59

标签: sql hibernate jpa annotations hibernate-annotations

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

比如说,我的实体类中有一个序列主键字段“Id”和其他字段名“ex_Id”。

主键ID将在持久性过程中自动生成,但我想知道如何设置我的“ex_Id”。因为需要使用相同的主键也是其中的一部分。

示例:

ID - 123456
ex_Id - EX_ID_123456

我们有任何注释来实现这一目标吗?所以我可以在坚持之前作为实体本身的一部分来做。

1 个答案:

答案 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。:我没有编译这段代码,所以这可能容易出错。