2011-11-13 130 views
0

我想這是不是這樣做,所以任何提示將是有益的標準方式,這裏是我的代碼:簡單的對象持久化+休眠

@RequestMapping("/register") 
public String register(Map<String, Object> map, @ModelAttribute("user") MyUser user) { 

    if(user.getLogin() == ""){ 
     map.put("user", new MyUser()); 
    } 
    else{ 
     map.put("user", user); 
     map.put("result", userService.addMyUser(user)); 
    } 

    return "register"; 
} 

以下什麼原因的錯誤:

org.hibernate.AssertionFailure: null id in org.mypackage.MyUser entry (don't flush the Session after an exception occurs)

這裏是MyUser類:

@Entity 
@Table(name="MyUser") 
public class MyUser{ 

    @Id 
    @Column(name="idMyUser") 
    @GeneratedValue 
    private Integer id; 

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

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

    public String getLogin() { 
     return login; 
    } 

    public void setLogin(String login) { 
     this.login = login; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

} 
+2

請提供MyUser的實體類,聽起來像您可能在主鍵字段('@Id')中缺少@GeneratedValue,在這種情況下,您需要手動設置它 – esaj

+0

感謝您的支持,檢查現在編輯。 – Maxiq

回答

1

試着改變了@GeneratedValue戰略和/或發電機,S ee herehere瞭解詳情(例如,您可以嘗試@GeneratedValue(strategy = GenerationType.IDENTITY)。您還可以檢查數據庫表是否設置爲生成主鍵值。異常似乎表明主鍵字段未被當前策略和/或生成器取消。

+0

謝謝,我實際上沒有在數據庫中的id字段上獲得「自動增量」。但是如何避免在表單爲空時保存我的用戶? (如果用戶只是第一次進入'register'頁面)?我注意到,如果條件得到錯誤...... – Maxiq

+0

您是否已經解決了主鍵問題?我從來沒有嘗試過使用沒有數據庫生成的主鍵的Hibernate/JPA,你可能需要手動設置它們。至於條件失敗,不要使用'==' - 與字符串(或通常任何非基本類型)比較,這將檢查兩個對象是否是相同的對象,而不是如果它們的內容相同。所以用'if(user.getLogin()。equals(「」))'來代替。 – esaj

+0

好吧,很快:現在我有'if'條件的問題,它總是去'else'子句,我不知道應該有什麼條件...... – Maxiq