我在Java EE项目中遇到了问题。我不知道我的错误是什么。如果有人可以帮助我,我将非常感激。
这是问题所在:
Caused by: org.hibernate.TransientObjectException: cannot lock an unsaved transient instance: com.carveras.escola.model.Alumne
at org.hibernate.event.internal.DefaultLockEventListener.onLock(DefaultLockEventListener.java:74)
at org.hibernate.internal.SessionImpl.fireLock(SessionImpl.java:751)
at org.hibernate.internal.SessionImpl.fireLock(SessionImpl.java:744)
at org.hibernate.internal.SessionImpl.access$1200(SessionImpl.java:204)
at org.hibernate.internal.SessionImpl$LockRequestImpl.lock(SessionImpl.java:2682)
at com.carver_as.carverjsf.model.CarverPureHibernate5DAO.reattach(CarverPureHibernate5DAO.java:438)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:206)
at com.sun.proxy.$Proxy126.reattach(Unknown Source)
at com.carveras.escola.web.EditaPersonaBean.init(EditaPersonaBean.java:55)
... 82 more
答案 0 :(得分:1)
异常消息清楚地表明,您不能锁定数据库中尚不存在的对象(此类对象称为Transient)。 lock()
调用将锁定数据库中的行。您正在尝试锁定一个临时对象,这意味着Hibernate甚至不知道该对象在数据库中是否具有相应的行。
答案 1 :(得分:0)
瞬态-如果对象刚刚被实例化,则该对象是瞬态的 使用new运算符,并且它不与Hibernate关联 会话。它在数据库中没有持久性表示,也没有 标识符值已分配。瞬态实例将是 如果应用程序不保存 参考了。使用休眠会话制作对象 持久的(让Hibernate处理那些 为此转换需要执行)。
这意味着您需要做类似的事情
Long id = (Long) session.save(myObject);
以便hibernate知道该对象(与Hibernate会话相关联)并保存在数据库中