java - 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 字段使用序列生成器?),但仍然不知道如何动态更改前缀。任何帮助,将不胜感激。提前致谢。
此致,
伊娃
解决方案
推荐阅读
- c# - 使用绑定时滚动到列表视图中最后添加的项目
- r - 相同点的多边形和线没有正确重叠
- swift - 使用 Swift (Firestore) 访问特定文档字段
- python - 如何在pygame中检查我的类的所有实例之间的冲突?
- android - ListView 的片段 SearchView
- ruby-on-rails - Rails 5:是否可以打印出具有不同语言区域设置的页面?
- arrays - 如何将 json 值推入数组而不被 angular 6 替换?
- android - WebRTC - 创建 PeerConnectionFactory 对象
- jquery - 将鼠标悬停在 1 个 div 上以更改另一个中的内容
- python - How can I fix the following code to enumerate words of length $k$ in an alphabet?