2010-11-13 105 views
2

我正在使用Hibernate作为ORM工具,并且在从表中加载数据时出现以下错误。使用休眠时从表加载数据时出错

org.hibernate.HibernateException: CGLIB Enhancement failed: com.hotel.entity.HotelUser 
    at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxy(CGLIBLazyInitializer.java:96) 
    at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.getProxy(CGLIBProxyFactory.java:49) 
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:379) 
    at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3455) 
    at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:257) 
    at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:191) 
    at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103) 
    at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878) 
    at org.hibernate.impl.SessionImpl.load(SessionImpl.java:795) 
    at org.hibernate.impl.SessionImpl.load(SessionImpl.java:788) 
    at com.hotel.domain.UserLoginService.checkUserCredentials(UserLoginService.java:17) 
    at com.hotel.app.UserLoginManager.checkUserCredentials(UserLoginManager.java:12) 
    at com.hotel.app.UserLoginManager.main(UserLoginManager.java:23) 
Caused by: java.lang.InstantiationException: com.hotel.entity.HotelUser$$EnhancerByCGLIB$$fa712a57 
    at java.lang.Class.newInstance0(Unknown Source) 
    at java.lang.Class.newInstance(Unknown Source) 
    at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyInstance(CGLIBLazyInitializer.java:107) 
    at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxy(CGLIBLazyInitializer.java:93) 
    ... 12 more 

请让我知道,我错过了什么?下面

是我的课

public class HotelUser implements Serializable { 

    private static final long serialVersionUID = 1L; 
    private String userId; 
    private String password; 
    private String userName; 

    private HotelUser() { 

    } 
    /** 
    * @param userId 
    * @param password 
    * @param userName 
    * @param lastLoginDate 
    */ 
    public HotelUser(String userId, String password, String userName) { 
     super(); 
     this.userId = userId; 
     this.password = password; 
     this.userName = userName; 
    } 
    /** 
    * @return the userId 
    */ 
    public String getUserId() { 
     return userId; 
    } 
    /** 
    * @param userId the userId to set 
    */ 
    public void setUserId(String userId) { 
     this.userId = userId; 
    } 
    /** 
    * @return the password 
    */ 
    public String getPassword() { 
     return password; 
    } 
    /** 
    * @param password the password to set 
    */ 
    public void setPassword(String password) { 
     this.password = password; 
    } 
    /** 
    * @return the userName 
    */ 
    public String getUserName() { 
     return userName; 
    } 
    /** 
    * @param userName the userName to set 
    */ 
    public void setUserName(String userName) { 
     this.userName = userName; 
    } 
} 

和HBM文件如下:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping> 
    <class name="com.hotel.entity.HotelUser" table="hotel_user"> 
     <id name="userId" type="string" column="USER_ID"> 
     </id> 
     <property name="password" type="string" column="PASSWORD" /> 
     <property name="userName" type="string" column="USER_NAME" /> 
    </class> 
</hibernate-mapping> 

回答

9

我的猜测在HotelUser类中没有非私有的默认(无参数)构造函数。

See this question for more details

+1

谢谢..那工作我添加了默认构造和运行没有任何问题..但如果我不想有一个默认的构造函数,那么该怎么办? – 2010-11-13 09:41:37

+0

@Mrityunjay你不能。看到我添加的链接 – Bozho 2010-11-13 09:54:25

0

我最近也面临同样的问题......。

这与在web应用程序的类路径中使用多个版本的cglib jar文件有关。虽然我不确定它是否是这个jar文件,或者任何其他的hibernate使用和依赖的jar文件,因为我还在类路径中使用了不同版本的其他hibernate jar文件。

通过删除冲突版本的cglib &其他罐子,事情再次奏效。

0

检查POJO类中的(默认)非参数构造函数。如果不是那里,插入并再次编译