Java Springboot 中 mySQL 的自定义生成的具有持久序列的列值
Custom generated column value with persistent sequence for mySQL in Java Springboot
假设 mySQL 数据库中的 table 看起来像这样,包含以下列:
| id | name | reference|
- id是持久化时自动生成的big-int
- name 是一个 varchar
- reference 是一个 varchar
我目前正在使用 spring-boot 和 spring-jpa.
当我坚持这个实体时,有没有办法让引用列仅在它为空时以自定义方式自动生成。例如:
INSERT INTO my_table(name,reference) VALUES('John', 'MREF-System-0940');
会产生如下结果
| id | name | reference |
| 1 | John | MREF-System-0940 |
但是当我执行以下命令时
INSERT INTO my_table(name) VALUES('John');
将产生如下结果(引用基于 'REF-{name}-{sequence}' 其中序列可以是 id 或预定义的持久序列)
| id | name | reference |
| 2 | John | REF-John-2 |
它应该在持久化实体时检测到该列为空时自动生成引用列reference。
如果可能,我们可以在末尾附加生成的 id 列吗?如果没有,是否有一种可行的方法来自动生成这样的引用。
意思是如果我们这样做
INSERT INTO my_table(name) VALUES('Bob');
可能会产生如下结果
| id | name | reference |
| 3 | Bob | REF-Bob-001 |
要使 JPA 生成字段值,您应该使用 myEntityRepository#save
而不是本机修改查询。
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
String name;
String reference;
public MyEntity(String name) {
this.name = name;
}
//getters, setters, toString, hashcode, equals
@PostPersist
public void setReferencePostPersist(){
if(id != null) {
reference = "REF-" + name + "-" + id;
}
}
}
然后
@Autowired
MyEntityRepository repository;
public MyEntity saveNewMyEntity(String name) {
MyEntity myEntity = new MyEntity(name);
return repository.save(myEntity);
}
假设 mySQL 数据库中的 table 看起来像这样,包含以下列:
| id | name | reference|
- id是持久化时自动生成的big-int
- name 是一个 varchar
- reference 是一个 varchar
我目前正在使用 spring-boot 和 spring-jpa.
当我坚持这个实体时,有没有办法让引用列仅在它为空时以自定义方式自动生成。例如:
INSERT INTO my_table(name,reference) VALUES('John', 'MREF-System-0940');
会产生如下结果
| id | name | reference |
| 1 | John | MREF-System-0940 |
但是当我执行以下命令时
INSERT INTO my_table(name) VALUES('John');
将产生如下结果(引用基于 'REF-{name}-{sequence}' 其中序列可以是 id 或预定义的持久序列)
| id | name | reference |
| 2 | John | REF-John-2 |
它应该在持久化实体时检测到该列为空时自动生成引用列reference。
如果可能,我们可以在末尾附加生成的 id 列吗?如果没有,是否有一种可行的方法来自动生成这样的引用。
意思是如果我们这样做
INSERT INTO my_table(name) VALUES('Bob');
可能会产生如下结果
| id | name | reference |
| 3 | Bob | REF-Bob-001 |
要使 JPA 生成字段值,您应该使用 myEntityRepository#save
而不是本机修改查询。
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
String name;
String reference;
public MyEntity(String name) {
this.name = name;
}
//getters, setters, toString, hashcode, equals
@PostPersist
public void setReferencePostPersist(){
if(id != null) {
reference = "REF-" + name + "-" + id;
}
}
}
然后
@Autowired
MyEntityRepository repository;
public MyEntity saveNewMyEntity(String name) {
MyEntity myEntity = new MyEntity(name);
return repository.save(myEntity);
}