hibernate里面一个类型错误的异常:
pojo类:
public class Items {
private Integer id;
private String title;
private String intro;
private Date enterTime;
private Date startTime;
private Date endTime;
private Short state;
        public get....
        public set....
}
Items.hbm.xml文件:(是我手动输入的)
<?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>
<!-- 
    Created by the Middlegen Hibernate plugin 2.1    http://boss.bekk.no/boss/middlegen/
    http://www.hibernate.org/
-->
<class name="com.pojo.Items" table="items" dynamic-update="true">
    <id name="id" type="java.lang.Integer" column="id">
        <generator class="uuid.hex" />
    </id>
    <property name="title" type="java.lang.String" column="title" />
    <property name="intro" type="java.lang.String" column="intro" />
    <property name="enterTime" type="java.util.Date" column="enterTime" />
    <property name="startTime" type="java.util.Date" column="startTime" />
    <property name="endTime" type="java.util.Date" column="endTime" />
    <property name="state" type="java.lang.Short" column="state" />
    <!-- Associations -->
</class>
</hibernate-mapping>
myhibernate.cfg.xml文件,也是手动输入的:
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-configuration
   PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.url">
            jdbc:mysql://localhost:3306/mydb
        </property>
        <property name="hibernate.connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="hibernate.connection.username">
            root
        </property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        <property name="show_sql">
            true
        </property>
        <property name="hibernate.connection.pool_size">
            2
        </property>
        <mapping resource="com/pojo/Items.hbm.xml"/>
        <!--  <mapping resource="cn/hxex/message/model1/Message.hbm.xml"/>-->
    </session-factory>
</hibernate-configuration>
操作的类:
public class ItemsOperate { private Session session = null;

public ItemsOperate(){
File file = new File("mydbhibernate.cfg.xml");
if (file.exists()) {
            Configuration config = new Configuration().configure(file);
            @SuppressWarnings("deprecation")
SessionFactory factory = config.buildSessionFactory();
            this.session = factory.openSession();
        } else {
            System.out.println("error");
            System.exit(0);
        }
}
public void insert(Items item){
session.getTransaction().begin();
this.session.save(item);
session.getTransaction().commit();
        session.close();
}
        //other methods......
        
   public static void main(String[] args) {
// TODO Auto-generated method stub
Items item = new Items();
item.setId(1);//就是执行这个的时候出现异常
item.setTitle("title");
item.setIntro("introduce");
item.setEnterTime(new Date());
item.setStartTime(new Date());
item.setEndTime(new Date());
item.setState((short) 1);
System.out.println(item);
ItemsOperate oper = new ItemsOperate();
oper.insert(item);
}
}
问题就是,在执行insert这个方法的时候,报异常了:
2012-11-18 9:29:24 org.hibernate.property.BasicPropertyAccessor$BasicSetter set
ERROR: HHH000091: Expected type: java.lang.Integer, actual value: java.lang.String
Exception in thread "main" org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.pojo.Items.id
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:119)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.setIdentifier(AbstractEntityTuplizer.java:381)
at org.hibernate.persister.entity.AbstractEntityPersister.setIdentifier(AbstractEntityPersister.java:4430)
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:183)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:136)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:753)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:745)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:741)
at com.firsthibernate.ItemsOperate.insert(ItemsOperate.java:36)
at com.firsthibernate.ItemsOperate.main(ItemsOperate.java:76)
Caused by: java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65)看异常说明是类型错误,但是我所有的设置根本就没有把id设成String 的地方呀??为什么会报这种错?请高手指教
我只有最后20分了 希望不要因为分少而不想指点一二

解决方案 »

  1.   

    private Integer id;
    改成Long试试,默认数据库中主键声明为number的对应的是Long类型
    另外其他属性也不要用Integer,int就可以了,需要用到引用类型的时候会自动转的。
    <property name="title" type="java.lang.String" column="title" />
    type="java.lang.String"这些都是可以不用打的,会自动是别的。
      

  2.   


    //1.使用configuration初始化hibernate读取配置文件
    Configuration config=new Configuration();
    config.configure();//默认加载hibernate.cfg.xml的配置文件
    //config.configure("hibernate.cfg.xml");//配置文件自定义配置
    //2构建sessionfactory
    SessionFactory fac=config.buildSessionFactory();

    //3生成session
    Session session=fac.openSession();//使用默认session
    //4.开始事务
    Student s=new Student();
    s.setId(1);
    s.setName("briup");
    s.setAddress("briup");
    s.setAge(12); 
    Transaction tr=session.beginTransaction();
    session.save(s);//提交操作s
    //save delete update

    tr.commit();
    session.close();
    student.hbm.xml
    <hibernate-mapping package="com.briup.hibernate.pojo" >
    <class name="Student"  table="student" >
    <id name="id" column="id">
    </id>
    <property name="name" column="name"></property>
    <property name="address" column="address"></property>
    <property name="age" column="age"></property>
    </class>
    </hibernate-mapping>
      

  3.   

    ERROR: HHH000091: Expected type: java.lang.Integer, actual value: java.lang.String
    Exception in thread "main" org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.pojo.Items.id
    这个说你的参数不对  数据库映射的时候需要的是String  你调用的sette方法参数是Integer
    你的com.pojo.Items.id和数据库没有映射好