@DynamicInsert使用問題

    在代碼中,想讓數據庫中的一個字段在無數據插入時使用默認值

    持久類代碼如下

@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

發佈了26 篇原創文章 · 獲贊 14 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章