在代码中,想让数据库中的一个字段在无数据插入时使用默认值
持久类代码如下
@Entity
@Table(name = "dormitory")
@DynamicInsert(true)
@DynamicUpdate(true)
public class Dormitory implements Serializable{
private int ID;
private String adress;
private Set<Student> students = new HashSet<>();
private int number;
public Dormitory() {
}
public Dormitory(String adress, int number) {
this.adress = adress;
this.number = number;
}
public Dormitory(String adress) {
this.adress = adress;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
@Column(name = "adress",nullable = false,length = 20)
@Basic
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
@OneToMany
@JoinColumn(name = "dormitory_id")
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
@Column(name = "number",columnDefinition = "INT default 4")
@Basic
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
测试类如下
<pre name="code" class="java">public class StuTest {
@Test
public void hello(){
Dormitory dormitory = new Dormitory("6#522");
DormitoryDao dormitoryDao = new DormitoryDao(HibernateUtils.getSessionFactory());
dormitoryDao.insertDormitory(dormitory);
dormitoryDao.commit();
}
}
输出的语句为
insert
into
dormitory
(adress, number)
values
(?, ?)
这是因为持久化类中number属性用的是int,int未赋值时默认0,解决办法很简单,吧它改成Integer
修改后的持久化类
@Entity
@Table(name = "dormitory")
@DynamicInsert(true)
@DynamicUpdate(true)
public class Dormitory implements Serializable{
private int ID;
private String adress;
private Set<Student> students = new HashSet<>();
private Integer number;
public Dormitory() {
}
public Dormitory(String adress, Integer number) {
this.adress = adress;
this.number = number;
}
public Dormitory(String adress) {
this.adress = adress;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic
public int getID() {
return ID;
}
public void setID(int ID) {
this.ID = ID;
}
@Column(name = "adress",nullable = false,length = 20)
@Basic
public String getAdress() {
return adress;
}
public void setAdress(String adress) {
this.adress = adress;
}
@OneToMany
@JoinColumn(name = "dormitory_id")
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
@Column(name = "number",columnDefinition = "INT default 4")
@Basic
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
}
依然使用上个测试
hibernate输出的SQL为
insert
into
dormitory
(adress)
values
(?)
Integer是类,所以默认是null