我正在使用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>
答案 0 :(得分:9)
我的猜测是你的HotelUser
课上没有非私人的,默认的(无法参考)构造函数。
答案 1 :(得分:0)
我最近也面临同样的问题......
这与在web应用程序的类路径中拥有多个版本的cglib jar文件有关。虽然我不确定它是否是这个jar文件,或者hibernate使用和依赖的任何其他jar文件,因为我还在不同版本的类路径中有其余的hibernate jar文件。
删除cglib&amp;的冲突版本其他的罐子,事情再次发挥作用。
答案 2 :(得分:0)
检查POJO类中的(默认)非参数构造函数。如果不存在,请再次插入和编译