在代碼中,想讓數據庫中的一個字段在無數據插入時使用默認值
持久類代碼如下
@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