2016-12-17 51 views
1

在插入新記錄時,我的PersonalInfo對象的屬性與數據庫列不匹配。對象值與休眠表中的表列不匹配

我試過一些方法來做到這一點,到目前爲止我還沒有任何問題。

我已經試過以下

  • 1.- session.save(Object)
  • 2:session.createNativeQuery(sqlQuery)

    他們都做工精細,用最後一個唯一的缺點是,表中有8字段,這意味着我必須編寫太多的代碼將每個參數設置到Query對象中。

    現在我試圖使用@SQLInsert註釋,然後我得到了我前面提到的問題。 我真的不知道發生了什麼,它讓我覺得可能只有一個配置參數丟失或類似的東西。

我已經檢查我通過獲取從控制檯這個輸出傳遞正確的順序的信息。

PersonalInfo [userId=30, password=myPass, status=0, type=student, firstName=Francisco, lastName=Hernandez, secondLastName=Salgado, sessionId=] 

Hibernate: INSERT INTO personal_info (userId, password, status, type, firstName, lastName, secondLastName, sessionId) VALUES(?, MD5(?) , ?, ?, ?, ?, ?, ?) 

這是代碼從我PersonalInfo類片斷這表明了使用註釋的。

@Entity(name="personal_info") 
@SQLInsert(sql="INSERT INTO personal_info (userId, password, status, type, firstName, lastName, secondLastName, sessionId)" 
       + " VALUES(?, MD5(?) , ?, ?, ?, ?, ?, ?)") 

public class PersonalInfo { 

    @Id 
    @Column(name = "userId") 
    private int userId; 

    @Column(name = "password") 
    private String password; 

    @Column(name = "status") 
    private int status; 

    @Column(name = "type") 
    private String type; 

    @Column(name = "firstName") 
    private String firstName; 

    @Column(name ="lastName") 
    private String lastName; 

    @Column(name ="secondLastName") 
    private String secondLastName; 

    @Column(name ="sessionId") 
    private String sessionId; 

} 

執行插入操作的方法。

public int save(PersonalInfo personalInfo){        
    session = sessionFactory.openSession();    
     session.beginTransaction();    
      int result = (Integer)session.save(personalInfo);  
     session.getTransaction().commit();  
    session.close();       
    return result; 
} 

最後的主要方法。

public static void main(String args[]){ 

    SessionFactory sessionFactory = buildSessionFactory(); 

    // I've ommited some attributes that have a default value so they're initialized within the constructor 
    PersonalInfo personalInfo= new PersonalInfoBuilder("Francisco","Hernandez","Salgado") 
        .withLogInInfo(30, "myPass") 
        .withType("student").build(); 

    System.out.println(personalInfo); 

    new PersonalInfoDAO(sessionFactory).save(personalInfo);    

} 

除了輸出從我得到的PostgreSQL後插入。

enter image description here

作爲averybody可以看到的值不匹配的列。 很抱歉的表的列名,我決定做以西班牙語翻譯爲英語,使更多的人能夠幫助我

PersonalInfo [userId=30, password=myPass, status=0, type=student, firstName=Francisco, lastName=Hernandez, secondLastName=Salgado, sessionId=] 
+0

您是否嘗試從插入查詢中刪除md5? – aviad

+0

我已經這樣做了,但我得到了相同的結果。 – Sandoval0992

回答

0

下面的線節省datosPersonales而不是從主要方法personalInfo。

new PersonalInfoDAO(sessionFactory).save(datosPersonales);

personalInfo有正確的信息和datosPersonales沒有。

+0

這是一個類型錯誤,datosPersonales它實際上是personalInfo – Sandoval0992