hibernate里面的类型问题

CSDN0327 2012-11-18 09:45:21
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分了 希望不要因为分少而不想指点一二
...全文
291 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
关键我是洛哥 2012-11-18
  • 打赏
  • 举报
回复
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和数据库没有映射好
失落夏天 2012-11-18
  • 打赏
  • 举报
回复

//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>
失落夏天 2012-11-18
  • 打赏
  • 举报
回复
private Integer id; 改成Long试试,默认数据库中主键声明为number的对应的是Long类型 另外其他属性也不要用Integer,int就可以了,需要用到引用类型的时候会自动转的。 <property name="title" type="java.lang.String" column="title" /> type="java.lang.String"这些都是可以不用打的,会自动是别的。

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧