您好,我正在使用developenig Java Web应用程序,并且在尝试使用hibernate模式获取数据时遇到了下一个异常
java.lang.ClassCastException: com.digitalticket.model.UserType_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
这里stacktrace
java.lang.ClassCastException: com.digitalticket.model.UserType_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(JavassistLazyInitializer.java:147) at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:75) at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:771) at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:4613) at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:349) at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:270) at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:150) at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1070) at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:989) at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:716) at org.hibernate.type.EntityType.resolve(EntityType.java:502) at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:170) at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:144) at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:1114) at org.hibernate.loader.Loader.processResultSet(Loader.java:972) at org.hibernate.loader.Loader.doQuery(Loader.java:920) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:354) at org.hibernate.loader.Loader.doList(Loader.java:2553) at org.hibernate.loader.Loader.doList(Loader.java:2539) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2369) at org.hibernate.loader.Loader.list(Loader.java:2364) at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:126) at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1682) at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:380) at com.digitalticket.model.DAO.fetchAll(DAO.java:204) at com.digitalticket.controller.IndexController.handleRequestInternal(IndexController.java:22) at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:154) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:50) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) at javax.servlet.http.HttpServlet.service(HttpServlet.java:844) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:238) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3363) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3333) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146) at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564) at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254) at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:550) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295) at weblogic.work.ExecuteThread.run(ExecuteThread.java:254)
这是我的代码
public T fetchAll(tClass<T> className) { Session s = sessionFactory.getCurrentSession(); s.beginTransaction(); try { List<T> results = (List<T>) sessionFactory.getCurrentSession() .createCriteria(className) .list(); s.getTransaction().commit(); return results(); } catch (NullPointerException ex) { return null; } catch (RuntimeException re) { s.getTransaction().rollback(); throw re; } finally { } }
这是我的对象
public class User implements java.io.Serializable { /** * */ private static final long serialVersionUID = -2383716625869790753L; private long userId; private UserType userType; private String email; private String password; private String name; private String surname; private String middlename; private Set<Ticket> tickets = new HashSet<Ticket>(0); private Set<Organization> organizations = new HashSet<Organization>(0); public User() { } public User(long userId, String email, String password, String name, String surname) { this.userId = userId; this.email = email; this.password = password; this.name = name; this.surname = surname; } public User(long userId, UserType userType, String email, String password, String name, String surname, String middlename, Set<Ticket> tickets, Set<Organization> organizations) { this.userId = userId; this.userType = userType; this.email = email; this.password = password; this.name = name; this.surname = surname; this.middlename = middlename; this.tickets = tickets; this.organizations = organizations; } public long getUserId() { return this.userId; } public void setUserId(long userId) { this.userId = userId; } public UserType getUserType() { return this.userType; } public void setUserType(UserType userType) { this.userType = userType; } public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getSurname() { return this.surname; } public void setSurname(String surname) { this.surname = surname; } public String getMiddlename() { return this.middlename; } public void setMiddlename(String middlename) { this.middlename = middlename; } public Set<Ticket> getTickets() { return this.tickets; } public void setTickets(Set<Ticket> tickets) { this.tickets = tickets; } public Set<Organization> getOrganizations() { return this.organizations; } public void setOrganizations(Set<Organization> organizations) { this.organizations = organizations; } } public class UserType implements java.io.Serializable { /** * */ private static final long serialVersionUID = -206438165274679246L; private long userTypeCode; private String userTypeName; private Set<User> users = new HashSet<User>(0); public UserType() { } public UserType(long userTypeCode, String userTypeName) { this.userTypeCode = userTypeCode; this.userTypeName = userTypeName; } public UserType(long userTypeCode, String userTypeName, Set<User> users) { this.userTypeCode = userTypeCode; this.userTypeName = userTypeName; this.users = users; } public long getUserTypeCode() { return this.userTypeCode; } public void setUserTypeCode(long userTypeCode) { this.userTypeCode = userTypeCode; } public String getUserTypeName() { return this.userTypeName; } public void setUserTypeName(String userTypeName) { this.userTypeName = userTypeName; } public Set<User> getUsers() { return this.users; } public void setUsers(Set<User> users) { this.users = users; } }
这是映射
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Generated Mar 16, 2014 10:31:53 AM by Hibernate Tools 4.0.0 --> <hibernate-mapping> <class name="com.digitalticket.model.User" table=""USER""> <id name="userId" type="long"> <column name="USER_ID" precision="10" scale="0" /> <generator class="assigned" /> </id> <many-to-one class="com.digitalticket.model.UserType" fetch="select" name="userType"> <column name="USER_TYPE" precision="10" scale="0" /> </many-to-one> <property generated="never" lazy="false" name="email" type="string"> <column length="20" name="EMAIL" not-null="true" unique="true" /> </property> <property generated="never" lazy="false" name="password" type="string"> <column length="32" name="PASSWORD" not-null="true" /> </property> <property generated="never" lazy="false" name="name" type="string"> <column length="64" name="NAME" not-null="true" /> </property> <property generated="never" lazy="false" name="surname" type="string"> <column length="64" name="SURNAME" not-null="true" /> </property> <property generated="never" lazy="false" name="middlename" type="string"> <column length="64" name="MIDDLENAME" /> </property> <set fetch="select" inverse="true" lazy="true" name="tickets" sort="unsorted" table="TICKET"> <key> <column name="USER" precision="10" scale="0" /> </key> <one-to-many class="com.digitalticket.model.Ticket" /> </set> <set fetch="select" lazy="true" name="organizations" sort="unsorted" table="AUDITOR"> <key> <column name="USER" not-null="true" precision="9" scale="0" /> </key> <many-to-many entity-name="com.digitalticket.model.Organization" unique="false"> <column name="ORGANIZATION" not-null="true" precision="10" scale="0" /> </many-to-many> </set> </class> </hibernate-mapping> <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Generated Mar 16, 2014 10:31:53 AM by Hibernate Tools 4.0.0 --> <hibernate-mapping> <class name="com.digitalticket.model.UserType" table="USER_TYPE"> <id name="userTypeCode" type="long"> <column name="USER_TYPE_CODE" precision="10" scale="0" /> <generator class="assigned" /> </id> <property name="userTypeName" type="string"> <column name="USER_TYPE_NAME" length="40" not-null="true" unique="true" /> </property> <set name="users" table="USER" inverse="true" lazy="true" fetch="select"> <key> <column name="USER_TYPE" precision="10" scale="0" /> </key> <one-to-many class="com.digitalticket.model.User" /> </set> </class> </hibernate-mapping>
我正在使用Oracle Weblogic 12c服务器
通过将我的pom.xml中的依赖项更改为较旧的版本4.3.4进行了修复。最终错误已在4.3.4。最终版本更改为4.2.7。
不要以为这是最好的解决方案,但我还没有找到其他解决方案。