Hibernate - update the primary key 'id' co

2019-02-23 03:08发布

问题:

In my Java applicaion, I am using hibernate .hbm file to access database; Is this possible to update the primary key 'id' column in the table; Where the 'id' column in my .hbm file is like:

<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>

回答1:

try this:

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();

or just use 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);  


回答2:

No. Hibernate doesn't allow to change the primary key. In general, a primary key value should never change, if needs to be changed than the primary key column(s) are not good candidate(s) for a primary key.



回答3:

There is a workaround if you prefer to update via entity instead of query:

1) clone the entity to a new entity.
2) delete the old entity. (be careful of your cascade children entities)
3) change the primary key of new entity (or set it null depend your generation strategy).
4) save the new entity.


回答4:

In hibernate id column values are automatically incremented while session.save() is executed based on which generation strategy you use. Check this post for a simple example



回答5:

try to writing query like

update table_name set id=value where...............(specify remaining conditions)



回答6:

Basically, Hibernate does not allow to update or change the primary key of a database entity. The reason is the entity data that you fetch from database via some query or .get or .load method goes into persistent context layer. So from hibernate perspective updating of such persistent entity object means deletion of the older one from database and creation of a new one.
It better to make normal update query like

Query query=HibernateSessionFactory.getSession().createQuery(update table set id=? where id=?);
query.executeUpdate();
HibernateSessionFactory.getSession().beginTransaction().commit();