求各位帮忙测试类如下:
public class Many2Many2 {
public static void main(String args[]){
d();
}
static void d() {
Session s = null;
Transaction ts = null;
try{
Teacher te = new Teacher();
te.setName("te name");
Teacher ta = new Teacher();
ta.setName("ta name");
Student st = new Student();
st.setName("st name");
Student su = new Student();
su.setName("su name");
//Set<Student> stu = new HashSet<Student>();
//stu.add(st);
//stu.add(su);
/*
ta.setStudents(stu);
te.setStudents(stu);*/
s = HibernateUtil.getSession();
ts = s.beginTransaction();
s.save(ta);
s.save(te);
s.save(su);
s.save(st);
ts.commit();
}finally{
if(s!=null)
s.close();
}
}
}报错如下:
Exception in thread "main" org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.sias.Teacher#0]
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:190)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:143)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
at com.sias.Many2Many2.d(Many2Many2.java:43)
at com.sias.Many2Many2.main(Many2Many2.java:13)Student.hbm.xml如下:
<hibernate-mapping
package="com.sias"> <class name="Student">
<id name="id">
</id>
<property name="name"/>
<set name="teachers" table="teacher_student">
<key column="student_id"></key>
<many-to-many class="Teacher" column="teacher_id"/>
</set>
</class></hibernate-mapping>Teacher.hbm.xml 如下:<hibernate-mapping
package="com.sias"> <class name="Teacher">
<id name="id">
</id>
<property name="name"/>
<set name="students" table="teacher_student">
<key column="teacher_id"></key>
<many-to-many class="Student" column="student_id"/>
</set>
</class>
</hibernate-mapping>
public class Many2Many2 {
public static void main(String args[]){
d();
}
static void d() {
Session s = null;
Transaction ts = null;
try{
Teacher te = new Teacher();
te.setName("te name");
Teacher ta = new Teacher();
ta.setName("ta name");
Student st = new Student();
st.setName("st name");
Student su = new Student();
su.setName("su name");
//Set<Student> stu = new HashSet<Student>();
//stu.add(st);
//stu.add(su);
/*
ta.setStudents(stu);
te.setStudents(stu);*/
s = HibernateUtil.getSession();
ts = s.beginTransaction();
s.save(ta);
s.save(te);
s.save(su);
s.save(st);
ts.commit();
}finally{
if(s!=null)
s.close();
}
}
}报错如下:
Exception in thread "main" org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.sias.Teacher#0]
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:190)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:143)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:713)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:701)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:697)
at com.sias.Many2Many2.d(Many2Many2.java:43)
at com.sias.Many2Many2.main(Many2Many2.java:13)Student.hbm.xml如下:
<hibernate-mapping
package="com.sias"> <class name="Student">
<id name="id">
</id>
<property name="name"/>
<set name="teachers" table="teacher_student">
<key column="student_id"></key>
<many-to-many class="Teacher" column="teacher_id"/>
</set>
</class></hibernate-mapping>Teacher.hbm.xml 如下:<hibernate-mapping
package="com.sias"> <class name="Teacher">
<id name="id">
</id>
<property name="name"/>
<set name="students" table="teacher_student">
<key column="teacher_id"></key>
<many-to-many class="Student" column="student_id"/>
</set>
</class>
</hibernate-mapping>
解决方案 »
- hibernate many-to-many list 中 index问题?
- 发一篇某公司的面试题,忘大家指导
- 一个页面查询问题
- jstl 的问题
- 设计一个OR MAPPING框架 该做什么
- 一个javascript验证struts表单的问题
- 为了学习smartticket,谁能给个j2ee 1.3sdk?
- Java调用存储过程的问题,谢谢~
- 谁提供开源免费成熟的SOCKET守护服务的源码?
- html在Tomcat下的乱码问题
- 怎么读取当前包下1个txt文件的路径?谢谢!
- javax.management.MalformedObjectNameException:character '' in value....
Teacher ta = new Teacher();ta.setName("ta name"); 因为你没有设置主键生成策略,你这两个不同的对象id都是相同的,肯定会报错
Teacher ta = new Teacher();ta.setName("ta name"); 因为你没有设置主键生成策略,你这两个不同的对象id都是相同的,肯定会报错
恩,问题解决,初学hibernate,多谢兄台。。