日期:2014-05-18  浏览次数:20567 次

Hibernate(3.0)中写了一个复合主键类的例子(有具体代码),抛异常,请多指教
主键类的关键部分代码如下:

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