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 と setter を適用しないことにしました。また、「uid」は自動生成されるため、ゲッターとセッターは使用しませんでした。

誰かがエラーの原因を指摘できますか...? 前もって感謝します。

4

1 に答える 1

0

session.save(u);常にSQLをすぐに起動するわけではありませんが、可能であればバッチ処理します。送信時transaction.commitまたは呼び出し時に送信されsession.flush()ます。

于 2012-07-12T08:57:13.763 に答える