如何在Spring Boot中保存将长ID转换为的字段

时间:2018-11-12 08:41:31

标签: java spring jpa

我点击了以下链接: https://vladmihalcea.com/how-to-map-calculated-properties-with-hibernate-generated-annotation/

这是我的源代码:

private String firstName;

private String lastName;

private String middleName1;

private String middleName2;

private String middleName3;

private String middleName4;

private String middleName5;

@Generated( value = GenerationTime.ALWAYS )
@Column(columnDefinition =
    "AS CONCAT(" +
    "   COALESCE(firstName, ''), " +
    "   COALESCE(' ' + middleName1, ''), " +
    "   COALESCE(' ' + middleName2, ''), " +
    "   COALESCE(' ' + middleName3, ''), " +
    "   COALESCE(' ' + middleName4, ''), " +
    "   COALESCE(' ' + middleName5, ''), " +
    "   COALESCE(' ' + lastName, '') " +
    ")")
private String fullName;

它使用其他string字段来生成该fullname字段。

我想要的东西有所不同。

我在Spring Boot类中有一个自动增量ID字段:

private long id //or it can be int, does not matter

我还有另一个字段,该字段必须是唯一的字母数字。

private String code;

此字段将包含6个字母数字(大写或小写无关紧要)。

是否可以使用这种方法在创建新对象时自动保存此字段?

Long.toString("id_field_value",36);

实际上,它给出:

0 -> 0
1 -> 1
10 -> A

因此,当创建第一个对象时,id将为1。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

是的,有可能。

您可以使用其他方法生成代码,该方法将返回您的字母数字值,并将code属性设置为随机方法的返回值

答案 1 :(得分:0)

在长字段中尝试以下注释:

@Id   
@GeneratedValue(strategy = GenerationType.AUTO)
@SequenceGenerator(name="id_sequence", sequenceName="id_sequence", allocationSize=1)
private long id

使用休眠保存此持久性对象。确保您的架构中具有指定名称的序列。

模式可以通过以下方式创建:

CREATE SEQUENCE schema_name.id_sequence
    INCREMENT BY 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    START 1;

如果需要参考,可以参考link