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分了 希望不要因为分少而不想指点一二
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分了 希望不要因为分少而不想指点一二
解决方案 »
- 奇怪的GB18030乱码问题
- 打印spring jdbctemplate 执行的SQL语句
- quartz自身的表在创建的时候加了模式名,那么访问的时候怎么加模式名
- struts2 跳转
- jsp根据勾选上的ID 查询出数据
- 怎样编写web service服务器端?在线等待
- jboss结合spring的一个问题
- 关于spring的一个问题
- 我写了一个小程序,帮我看看对不
- 写了一个客户关系管理系统,进行查询的时候值没取到是什么原因
- java转义符的问题
- SSH2错误:nested exception is org.hibernate.hql.ast.QuerySyntaxException是什么意思
改成Long试试,默认数据库中主键声明为number的对应的是Long类型
另外其他属性也不要用Integer,int就可以了,需要用到引用类型的时候会自动转的。
<property name="title" type="java.lang.String" column="title" />
type="java.lang.String"这些都是可以不用打的,会自动是别的。
//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>
Exception in thread "main" org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.pojo.Items.id
这个说你的参数不对 数据库映射的时候需要的是String 你调用的sette方法参数是Integer
你的com.pojo.Items.id和数据库没有映射好