6

私の Java アプリケーションでは、hibernate .hbm ファイルを使用してデータベースにアクセスしています。テーブルの主キー「id」列を更新することは可能ですか。私の .hbm ファイルの「id」列は次のようになります。

<hibernate-mapping package="org.jems.user.model">
<class name="Student_Details" table="t_student">
<id name="id" type="int" column="id">
<generator class="increment"/>
</id>
<property name="name" column="name" type="string" unique="true" not-null="true" />
<property name="description" column="description" type="string"  />
<property name="comments" column="comments" type="string"  />
<property name="active"     column="isActive"   type="boolean"  not-null="true" />
</class>
</hibernate-mapping>
4

6 に答える 6

7

これを試して:

String hql="update table set id=? where id=? ";
Query query=HibernateSessionFactory.getSession().createQuery(hql);
query.setInteger(0,1);
query.setInteger(1,2);
query.executeUpdate();
HibernateSessionFactory.getSession().beginTransaction().commit();

または単にSQLを使用します:

String sql = "update table set id = ? where id= ?"
Session session = HibernateSessionFactory.getSession();  
SQLQuery query = session.createSQLQuery(sql);
query.setParameter(0, 1);
query.setParameter(1, 2);  
于 2013-03-21T05:14:31.110 に答える
5

いいえ。Hibernate では主キーを変更できません。一般に、主キー列が主キーの適切な候補ではない場合に変更する必要がある場合、主キー値は決して変更しないでください。

于 2013-03-21T05:14:56.070 に答える
0

休止状態では、使用する生成戦略に基づいて実行中idに列の値が自動的にインクリメントされます。簡単な例については、この投稿をsession.save()確認してください

于 2013-03-21T05:10:57.697 に答える
0

のようなクエリを書いてみてください

update table_name set id=value where................(残りの条件を指定)

于 2013-03-21T05:15:55.753 に答える
0

基本的に、Hibernate ではデータベース エンティティの主キーを更新または変更することはできません。その理由は、何らかのクエリまたは .get または .load メソッドを介してデータベースから取得したエンティティ データが、永続的なコンテキスト レイヤーに移動するためです。そのため、休止状態の観点から、そのような永続エンティティ オブジェクトの更新は、データベースから古いオブジェクトを削除し、新しいオブジェクトを作成することを意味します。
次のような通常の更新クエリを作成することをお勧めします

Query query=HibernateSessionFactory.getSession().createQuery(update table set id=? where id=?);
query.executeUpdate();
HibernateSessionFactory.getSession().beginTransaction().commit();
于 2013-12-27T11:13:21.707 に答える