在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這個屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/86951.html
標籤:其他
