使用JPA的时候,当我们插入数据的时候,我们不仅可以自己在model类里面赋初值,还可以使用数据库表的default值。希望大家通过以下对JPA学习,能对大家有帮助。
让我们开始进行JPA学习吧。首先,我们在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,就可以取数据库时间了。希望通过JPA学习,能帮到大家获得需要的知识。