首页 > 解决方案 > Spring Data JPA - 具有动态前缀的非 id 列上的序列生成器

问题描述

我对 Spring Data JPA 很陌生。我想在具有前缀但前缀可以在运行时更改的非 id 列上生成序列。

例如:如果用户键入“A”,那么数据将是“A00001”......它会像 A00002、A00003 一样继续。但用户可以键入“B”、“C”……那么数据将是“B00001”、“B00002”。

实体:

@Entity
public class UserEntity extends BaseTimeEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(nullable=false, length=20)
    private String role;

    @GeneratorType(type=CustomGenerator.class,when= GenerationTime.INSERT)
    @Column(nullable=false, length=45, unique = true, updatable = false)
    private String loginId;
}

自定义生成器:

public class CustomGenerator implements ValueGenerator<String> {
    private static final String query = "SELECT CONCAT('A',COALESCE(MAX((SUBSTR(LOGIN_ID,3))),10000)+1) FROM USER WHERE INSTR(LOGIN_ID, 'A')>0";

    @Override
    public String generateValue(Session session, Object o) {

        NativeQuery nativeQuery = session.createSQLQuery(query);
        String loginId = (String) nativeQuery.setFlushMode(COMMIT).uniqueResult();
        return loginId;
    }
}

我想出了如何在这篇文章的帮助下在非 ID 列上生成序列(如何为非 ID 字段使用序列生成器?),但仍然不知道如何动态更改前缀。任何帮助,将不胜感激。提前致谢。

此致,

伊娃

标签: javajpa

解决方案


推荐阅读