使用JPA,插入(或者修改)数据的时候使用数据库表的default值

本文介绍如何在JPA中设置字段的默认值,并利用Hibernate特性实现动态插入与更新。通过@Column(columnDefinition)注解和@dynamicInsert及@dynamicUpdate属性,确保在插入数据时使用数据库当前时间。
摘要由CSDN通过智能技术生成
使用JPA的时候,当我们插入数据的时候,我们不仅可以自己在model类里面赋初值,还可以使用数据库表的default值。

首先,我们在model类里面为column设置数据库default值,以前使用Hibernate的时候的做法是添加sql-type,例如:
<property name="viewDate" not-null="false" type="java.util.Date">
<column name="viewDate" sql-type="datetime default getdate()"/>
</property>

在JPA里面使用columnDefinition代替sql-type:
@Column(columnDefinition="datetime default getdate()")
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date viewDate;

那么,当我们的generateDdl设为true的时候,可以在数据库生成表,而且viewDate字段会带一个默认值getdate(),当我们的sql语句不
带viewDate字段的时候,就会使用到getdate()去取数据库的系统时间。

以前Hibernate的做法是添加dynamic-insert="true"和dynamic-update="true" 。但是JPA好像没有这个功能。如果你的JPA的Privider
是Hibernate的话可以添加如下Annotation为我们的实体提供dynamic-insert,dynamic-update,如下:
@Entity
@org.hibernate.annotations.Entity(dynamicInsert=true,dynamicUpdate=true)
public class MyEntity{
//省略其他字段
......
@Column(columnDefinition="datetime default getdate()")
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date viewDate;
//注意,这里不要给viewDate一个初始值,例如viewDate = new Date();是错的。只有null才会在加入的时候,使用到dynamicInsert
//省略getter,setter
......
}

那么,当加入一条MyEntity记录的时候,我们的viewDate为null,就可以取数据库时间了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值