0

我正在使用休眠。我想持久地在我的数据库中的表中添加一个新行。

我在我的动作类中使用的代码是:

try {
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            session.beginTransaction();
            u = new Users();
            u.setAge(this.getAge());
            u.setCity(this.getCity());
            u.setEmail(this.getEmail());
            u.setName(this.getUsername());
            u.setPassword(this.getPassword());
            u.setSex(this.getSex());
            try {
            session.save(u);
            } 
            catch (Exception e) {
            this.addActionError("Oops. An Error Encountered...! Email address already registered. Try with your new email address.");
            return ERROR;
            }
            session.getTransaction().commit();
            session.close();
        } catch (Exception e) {
            this.addActionError("Oops. An Error Encountered...!");
            return ERROR;
        }

该页面有时会显示外部捕获错误,有时会显示内部捕获错误。glassfish 服务器日志是:

WARNING: SQL Error: -1, SQLState: 42Z23
SEVERE: Attempt to modify an identity column 'UID'. 
SEVERE: Could not synchronize database state with session
org.hibernate.exception.SQLGrammarException: could not insert: [beans.Users]
..
Caused by: java.sql.SQLSyntaxErrorException: Attempt to modify an identity column 'UID'. 

我的表是“用户”,具有主键“UID”,它是自动生成的增量为 1。除了上述之外,还有许多字段是用 getter 检索的,但这些字段被赋予默认值作为创建行的表属性,所以我决定不为他们应用 getter 和 setter。我也没有为“uid”使用getter和setter,因为它是自动生成的。

有人可以指出可能是什么错误......?提前致谢。

4

1 回答 1

0

session.save(u);并不总是立即触发 sql,而是在可能的情况下对它们进行批处理。它在发送transaction.commit或调用时发送session.flush()

于 2012-07-12T08:57:13.763 回答