微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Java Springboot中为mySQL自定义生成的具有持久序列的列值

如何解决在Java Springboot中为mySQL自定义生成的具有持久序列的列值

给出 MysqL 数据库中的表,其外观如下所示:

| id  | name | reference|

我当前在 spring-jpa 中使用 spring-boot

当我保留该实体时,只有当它为null时,才有一种方法可以使参考列以自定义方式自动生成。例如:

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}',其中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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。