spring jpa 中如何在插入和更新时使用数据库表的默认值?-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

spring jpa 中如何在插入和更新时使用数据库表的默认值?

2016-03-17 11:27:24 8547 1

spring jpa 中如何在插入和更新时使用数据库表的默认值?

使用springside4.2.1,h2数据库,数据库部分脚本:

reate table ss_nodetype (
        id bigint generated by default as identity,
        type varchar(32) not null unique,
        name varchar(255) not null unique,
        poll_period int not null default '60',
        offline_counts tinyint not null default '5',
        description varchar(255) not null default '',
        create_date timestamp not null default CURRENT_TIMESTAMP,
        primary key (id)
    );
里面有些属性自带默认值。
Entity中 NodeType.java 的部分属性:

@Entity
@Table(name = "ss_nodetype")
// 默认的缓存策略.
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class NodeType extends IdEntity {
 
    private String type;
    private String name;
    private int pollPeriod;
    private byte offlineCounts;
    private String description;
    private Date createDate;
 
    public NodeType() {
 
    }
 
    public NodeType(String type, String name) {
        this.type = type;
        this.name = name;
    }
 
    @NotBlank
    @Column(name = "type", updatable = false)
    public String getType() {
        return type;
    }
 
    public void setType(String type) {
        this.type = type;
    }
 
    @NotBlank
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @NotNull
    @Column(name = "poll_period", insertable = false)
    public int getPollPeriod() {
        return pollPeriod;
    }
 
    public void setPollPeriod(int pollPeriod) {
        this.pollPeriod = pollPeriod;
    }
 
    @NotNull
    @Column(name = "offline_counts", insertable = false)
    public byte getOfflineCounts() {
        return offlineCounts;
    }
 
    public void setOfflineCounts(byte offlineCounts) {
        this.offlineCounts = offlineCounts;
    }
 
    @Column(name = "description", insertable = false)
    public String getDescription() {
        return description;
    }
 
    public void setDescription(String description) {
        this.description = description;
    }
 
    @Column(name = "create_date", updatable = false, insertable = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getCreateDate() {
        return createDate;
    }
 
    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }
}

再进行DAO单元测试时,查询都正常,就插入和更新时(New了一个NodeType),在验证时,不能自动用数据库表的默认值写入,比如对pollPeriod属性,数据库表的默认值是60,验证的却是0,不想在NodeType CLASS中另设默认值。
有没有办法使JPA在SAVE时使用数据库表的默认值?

取消 提交回答
全部回答(1)
  • a123456678
    2019-07-17 19:04:57

    spring-data-jpa提供insertable 和updatable两个变量注解属性,分别表示字段在插入和修改是,对象属性的可用性,例如创建人的insertable = true ,updatable = false, 当执行insert语句时将写入创建人,修改时将不能更改创建人,关于默认值,可以在@PrePersist和@PreUpdate来预置默认值。

    @PrePersist
        public void prePersist() {
            if (StringUtils.isEmpty(getId()))
                setId(UUID.randomUUID().toString());
     
        }
     
        @PreUpdate
        public void preUpdate() {
        }
    0 0
相关问答

20

回答

【大咖问答】对话PostgreSQL 中国社区发起人之一,阿里云数据库高级专家 德哥

阿里ACE 彭飞 2019-07-10 09:36:10 1229333浏览量 回答数 20

170

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 232477浏览量 回答数 170

145

回答

【新手入门】云服务器linux使用手册

fanyue88888 2012-11-26 17:14:18 159511浏览量 回答数 145

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 340612浏览量 回答数 8

119

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 301239浏览量 回答数 119

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 148604浏览量 回答数 22

24

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 658391浏览量 回答数 24

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 147600浏览量 回答数 31

39

回答

安全组详解,新手必看教程

我的中国 2017-11-30 15:23:46 263003浏览量 回答数 39

21

回答

请教一下数据量有100万条左右要什么配置?

易网网络 2013-03-27 15:18:02 193553浏览量 回答数 21
+关注
0
文章
14879
问答
问答排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载