IllegalArgumentException occurred while calling setter for property问题

清风舞柳 2020-03-03 10:59:45
在hibernate一对多测试练习中遇到了这个错误:
Exception in thread "main" IllegalArgumentException occurred while calling setter for property [Bean.Student.deptid (expected type = java.lang.String)]; target = [Bean.Student@6c2f1700], property value = [Bean.Dept@450794b4]
at org.hibernate.property.access.spi.SetterMethodImpl.set(SetterMethodImpl.java:99)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.setPropertyValues(AbstractEntityTuplizer.java:709)
at org.hibernate.tuple.entity.PojoEntityTuplizer.setPropertyValues(PojoEntityTuplizer.java:205)
at org.hibernate.persister.entity.AbstractEntityPersister.setPropertyValues(AbstractEntityPersister.java:4707)
at org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:183)
at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:125)
at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.performTwoPhaseLoad(AbstractRowReader.java:238)
at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.finishUp(AbstractRowReader.java:209)
at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:133)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:122)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)
at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:87)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:688)
at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:75)
at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:2185)
at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:565)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:247)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:561)
at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:132)
at org.hibernate.collection.internal.PersistentSet.iterator(PersistentSet.java:163)
at Dao.oneToManyDemo.main(oneToManyDemo.java:25)


其中oneToManyDemo代码如下:
package Dao;

import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.Session;
import org.hibernate.query.Query;
import Bean.Dept;
import Bean.Student;
import Hibernate.HibernateSessionFactory;

public class oneToManyDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub
Session s = HibernateSessionFactory.getSession();
Query<?> q = s.createQuery("from Dept");
List<?> l = (List<?>) q.list();
for(int i=0;i<(l).size();i++){
Dept dept=(Dept) l.get(i);
System.out.println(dept.getDeptid());
Set<Student> stu = dept.getStudents();
Iterator<Student> it = stu.iterator(); //该行就为报错的第25行
while(it.hasNext()){
Student st = (Student) it.next();
System.out.println(st.getSno()+" "+st.getSname());
}
}
}

}


其中Bean.Student类代码如下:
package Bean;

public class Student {
private String sno;
private String sname;
private String deptid;
public Student(){
}
public Student(String sno, String sname, String deptid) {
this.sno = sno;
this.sname = sname;
this.deptid = deptid;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getDeptid() {
return deptid;
}
public void setDeptid(String deptid) {
this.deptid = deptid;
}
}


student.hbm.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
<class name="Bean.Student" table="student" catalog="myweb">
<id name="sno" type="java.lang.String">
<column name="sno" length="4"></column>
<generator class="assigned"></generator>
</id>
<!-- name:设定待映射的持久化类的属性名 -->
<!-- column:设定和持久化类的属性对应的表的外键 -->
<!-- class:设定持久化类的属性的类型 -->
<many-to-one name="deptid" class="Bean.Dept" fetch="select">
<column name="deptid" length="4"></column>
</many-to-one>
<property name="sname" type="java.lang.String">
<column name="sname" length="20"></column>
</property>
</class>
</hibernate-mapping>
请问一下这个bug怎么改?Student中的deptid类型是String了,设置器的类型也为String。映射文件中的<many-to-one>标签又不能设置type这个属性。
...全文
1145 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

10,612

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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