我正在测试hibernate并给出这个查询
transaction = session.beginTransaction();
city = new City("A");
city = (City)session.merge(city);
city.setName("B");
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
我在命令行中收到这些查询:
Hibernate: insert into CITY (name) values (?)
Hibernate: update CITY set name=? where CITY_ID=?
Run Code Online (Sandbox Code Playgroud)
我使用merge而不是save,所以为什么hibernate正在更新我的对象,它不应该更新.是吗?这是什么错误?
Gau*_*rav 23
我将尝试使用更具体的例子来解释.假设您有如下情况:
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User userA = (User)session.get(User.class, 1101);
transaction.commit();
session.close();
// Since session is closed, userA is detached.
session = sessionFactory.openSession();
transaction = session.beginTransaction();
User userB = (User)session.get(User.class, 1101);
//Now here, userB represents the same persistent row as userA.
//When an attempt to reattach userA occurs, an exception is thrown
session.update(userA);
transaction.commit();
session.close();
Run Code Online (Sandbox Code Playgroud)
尝试重新挂接Detached对象时,发生userA.
Exception in thread "main" org.hibernate.NonUniqueObjectException: a
different object with the same identifier value was already associated
with the session:
This is because Hibernate is enforcing that only a single instance of a Persistent object exists in memory.
Run Code Online (Sandbox Code Playgroud)
为了解决上述问题,使用了merge(),如下所示:
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
User userA = (User)session.get(User.class, 1101);
transaction.commit();
session.close();
//userA is now detached as session is closed.
session = sessionFactory.openSession();
transaction = session.beginTransaction();
User userB = (User)session.get(User.class, 1101);
User userC = (User)session.merge(userA);
if (userB == userC) {
System.out.println("Reattched user is equal");
}
transaction.commit();
session.close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
28056 次 |
| 最近记录: |