I have a simple test, where I am trying to update the object, but merge seems to be performing an insert instead of update.
我有一个简单的测试,我试图更新对象,但合并似乎是执行插入而不是更新。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/app-context.xml","classpath:spring/testdb-context.xml"})
public class UserJPATest {
@Test
public void testUpdate() throws Exception {
System.out.println("update");
User entity = ObjectManager.USER_DAO.findById(3L);
entity.setUsername("harryUpdate");
ObjectManager.USER_DAO.update(entity);
User selEntity = ObjectManager.USER_DAO.findById(3L);
Assert.assertEquals(entity.getUsername(),selEntity.getUsername());
}
}
}
This is my update method
这是我的更新方法
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW)
public T update(T entity) throws Exception {
try {
T merged = entityManager.merge(entity);
return merged;
} catch (Exception e) {
e.printStackTrace();
throw new Exception(e);
}
}
Update to code
更新代码
@Override
@Transactional(propagation= Propagation.REQUIRES_NEW)
public T update(T entity) throws Exception {
try {
T merged = null;
BaseEntity baseEntity = null;
if(entity instanceof BaseEntity){
baseEntity = (BaseEntity)entity;
merged = entityManager.find(entityClass, baseEntity.getId());
}
merged = entityManager.merge(entity);
entityManager.flush();
return merged;
} catch (Exception e) {
e.printStackTrace();
throw new Exception(e);
}
}
Now I get the following error Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
现在我收到以下错误无法提交JPA事务;嵌套异常是javax.persistence.RollbackException:标记为rollbackOnly的事务
1 个解决方案
#1
24
I had a version column which was not set when seed data was inserted into database. Hence all the problems with update and delete
我有一个版本列,当种子数据插入数据库时没有设置。因此更新和删除的所有问题
#1
24
I had a version column which was not set when seed data was inserted into database. Hence all the problems with update and delete
我有一个版本列,当种子数据插入数据库时没有设置。因此更新和删除的所有问题