主键类的关键部分代码如下:public class TUserPK implements Serializable
{
private String firstname;
private String lastname;//这两个字段是表中影射过来的双主键
……//构造函数中初始化这两个主键。
……//两个字段的get,set方法
/**
*重写的equal方法
**/
public boolean equal(Object o)
{
if(this==o)return true;
if(!(o instanceof TUserPK))return false;
final TUserPK pk=(TUserPK) o;
if(!this.lastname.equals(pk.getLastname()))return false;
if(!this.firstname.equals(pk.firstname))return false;
return true;
}
/**
*重写的hashCode方法
**/
public int hashCode()
{
int result1;
int result2;
result1=(this.firstname==null?0:this.firstname.hashCode());
result2=(this.lastname==null?0:this.lastname.hashCode());
return result1+result2;
}
}测试类关键代码
public class Test
{
……
TUserPK pk=new TUserPK("AAA","BBB");
TUser2 user=new TUser2();//TUser2类是POJO类 user=(TUser2) session.load(TUser2.class, pk);
System.out.println("User age is =>"+user.getAge());
……
}
用测试类运行时,抛如下异常
org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of hibernate.table.TUser2.TUser2.setAge
at org.hibernate.tuple.PojoTuplizer.setPropertyValuesWithOptimizer(PojoTuplizer.java:203)
at org.hibernate.tuple.PojoTuplizer.setPropertyValues(PojoTuplizer.java:173)
at org.hibernate.persister.entity.BasicEntityPersister.setPropertyValues(BasicEntityPersister.java:2919)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:113)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:530)
at org.hibernate.loader.Loader.doQuery(Loader.java:436)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1345)
at org.hibernate.loader.entity.EntityLoader.load(EntityLoader.java:116)
at org.hibernate.loader.entity.EntityLoader.load(EntityLoader.java:101)
at org.hibernate.persister.entity.BasicEntityPersister.load(BasicEntityPersister.java:2471)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:351)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:332)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:113)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:75)
at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:643)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:59)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
at hibernate.table.TUser2.TUser2$$EnhancerByCGLIB$$569cd2a.getAge(<generated>)
at hibernate.table.TUser2.TestClass.main(TestClass.java:24)
Caused by: net.sf.cglib.beans.BulkBeanException
at hibernate.table.TUser2.TUser2$$BulkBeanByCGLIB$$cff23d11.setPropertyValues(<generated>)
at org.hibernate.tuple.PojoTuplizer.setPropertyValuesWithOptimizer(PojoTuplizer.java:200)
... 20 more
Caused by: java.lang.ClassCastException
... 22 more
Exception in thread "main"
{
private String firstname;
private String lastname;//这两个字段是表中影射过来的双主键
……//构造函数中初始化这两个主键。
……//两个字段的get,set方法
/**
*重写的equal方法
**/
public boolean equal(Object o)
{
if(this==o)return true;
if(!(o instanceof TUserPK))return false;
final TUserPK pk=(TUserPK) o;
if(!this.lastname.equals(pk.getLastname()))return false;
if(!this.firstname.equals(pk.firstname))return false;
return true;
}
/**
*重写的hashCode方法
**/
public int hashCode()
{
int result1;
int result2;
result1=(this.firstname==null?0:this.firstname.hashCode());
result2=(this.lastname==null?0:this.lastname.hashCode());
return result1+result2;
}
}测试类关键代码
public class Test
{
……
TUserPK pk=new TUserPK("AAA","BBB");
TUser2 user=new TUser2();//TUser2类是POJO类 user=(TUser2) session.load(TUser2.class, pk);
System.out.println("User age is =>"+user.getAge());
……
}
用测试类运行时,抛如下异常
org.hibernate.PropertyAccessException: exception setting property value with CGLIB (set hibernate.cglib.use_reflection_optimizer=false for more info) setter of hibernate.table.TUser2.TUser2.setAge
at org.hibernate.tuple.PojoTuplizer.setPropertyValuesWithOptimizer(PojoTuplizer.java:203)
at org.hibernate.tuple.PojoTuplizer.setPropertyValues(PojoTuplizer.java:173)
at org.hibernate.persister.entity.BasicEntityPersister.setPropertyValues(BasicEntityPersister.java:2919)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:113)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:530)
at org.hibernate.loader.Loader.doQuery(Loader.java:436)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
at org.hibernate.loader.Loader.loadEntity(Loader.java:1345)
at org.hibernate.loader.entity.EntityLoader.load(EntityLoader.java:116)
at org.hibernate.loader.entity.EntityLoader.load(EntityLoader.java:101)
at org.hibernate.persister.entity.BasicEntityPersister.load(BasicEntityPersister.java:2471)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:351)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:332)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:113)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:75)
at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:643)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:59)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:84)
at org.hibernate.proxy.CGLIBLazyInitializer.intercept(CGLIBLazyInitializer.java:134)
at hibernate.table.TUser2.TUser2$$EnhancerByCGLIB$$569cd2a.getAge(<generated>)
at hibernate.table.TUser2.TestClass.main(TestClass.java:24)
Caused by: net.sf.cglib.beans.BulkBeanException
at hibernate.table.TUser2.TUser2$$BulkBeanByCGLIB$$cff23d11.setPropertyValues(<generated>)
at org.hibernate.tuple.PojoTuplizer.setPropertyValuesWithOptimizer(PojoTuplizer.java:200)
... 20 more
Caused by: java.lang.ClassCastException
... 22 more
Exception in thread "main"
age是什么类型的
影射后 Integer
数据库中 VARCHAR2
影射后 String
还有你这个new的是无意义的(和你这的问题无关。只是不用new)
import java.io.Serializable;
public class TUser2
{
private Integer age;
private TUserPK pk; public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public TUserPK getPk() {
return pk;
}
public void setPk(TUserPK pk) {
this.pk = pk;
}
}TUser2.hbm.xml 代码:
<hibernate-mapping>
<class name="hibernate.table.TUser2.TUser2" table="T_USER2" schema="LIUZHICHAO">
<composite-id name="pk" class="hibernate.table.TUser2.TUserPK">
<key-property name="firstname" type="string">
<column name="FIRSTNAME" length="50" />
</key-property>
<key-property name="lastname" type="string">
<column name="LASTNAME" length="50" />
</key-property>
</composite-id>
<property name="age" type="long">
<column name="AGE" precision="10" scale="0" not-null="true" />
</property>
</class>
</hibernate-mapping>
我在网吧,我回去试试,是不是这个错,
如果是…………谢谢yhkyo,耐心的帮我
谢谢了
……
这里user.getAge()到的是一个对象,应该把它转化为java内置类型,你看你的错误里不也提示了Caused by: java.lang.ClassCastException
... 22 more?
就是这个错误,昨天我回去调了调,出来了,谢谢yhkyo。