2010-11-13 79 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類中的(默認)非參數構造函數。如果不是那裏,插入並再次編譯

相關問題