spring jpa 中如何在插入和更新时使用数据库表的默认值?
使用springside4.2.1,h2数据库,数据库部分脚本:
create 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🇲🇲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时使用数据库表的默认值?
Spring
SpringSide
Hibernate
撸主解决了吗?
前几天看到可以在实体类上加上这个注解
但是hibernate已经把注解标记为deprecated了,有什么其它的方法吗?
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() { }我使用了@DynamicInsert注解之后,存入数据库的值不是数据库默认的,而是java默认的这个该怎么办?