严重:尝试修改标识列'UID'

时间:2012-07-12 02:59:07

标签: hibernate hql

我正在使用hibernate。我想永久地在我的数据库中向表添加一个新行。

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

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检索的字段外,还有很多字段,但这些字段的默认值为table属性并创建了行所以我决定不为他们应用getter和setter。我也没有使用'uid'的getter和setter,因为它是自动生成的。

有人能指出可能出现的错误......? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

session.save(u);并不总是立即触发sql,但如果可能的话会批处理它们。 它是在transaction.commit或致电session.flush()时发送的。