有个用户选课的小项目,我想删除实现用户删除某个课程的选择,我是这样实现的,但总是不成功,也不报错,高手给指点一下:
1、我的user 的xml配置文件部分代码
<set name="courseSet" table="student_course"
cascade="save-update" lazy="false">
<key column="stu_id"></key> <many-to-many class="com.test.bean.Course" column="course_id" not-found="ignore"></many-to-many>
</set>
2、课程表的配置文件
<set name="userSet" table="student_course"
cascade="save-update" lazy="false" inverse="true">
<key column="course_id" />
<many-to-many class="com.test.bean.User"
column="stu_id" not-found="ignore"/>
</set>
3、删除中间表的代码: Course course = this.courseDao.findCourseById(id);// 通过id获得course Map sessionMap = ActionContext.getContext().getSession(); User user = this.userService.findUserById((Integer) sessionMap
.get("userid"));// 通过放在session中的userid获取user
user.getCourseSet().remove(course); course.getUserSet().remove(user); this.userService.saveOrUpdate(user);
1、我的user 的xml配置文件部分代码
<set name="courseSet" table="student_course"
cascade="save-update" lazy="false">
<key column="stu_id"></key> <many-to-many class="com.test.bean.Course" column="course_id" not-found="ignore"></many-to-many>
</set>
2、课程表的配置文件
<set name="userSet" table="student_course"
cascade="save-update" lazy="false" inverse="true">
<key column="course_id" />
<many-to-many class="com.test.bean.User"
column="stu_id" not-found="ignore"/>
</set>
3、删除中间表的代码: Course course = this.courseDao.findCourseById(id);// 通过id获得course Map sessionMap = ActionContext.getContext().getSession(); User user = this.userService.findUserById((Integer) sessionMap
.get("userid"));// 通过放在session中的userid获取user
user.getCourseSet().remove(course); course.getUserSet().remove(user); this.userService.saveOrUpdate(user);
DAO层
this.getHibernateTemplate().delete("from User u,Course c where u.uerid=c.courseid");
试试
应该是
this.getHibernateTemplate().delete("from User u where u.uerid=user.id and Course.courseid=courseid");
在course那边inverse="true" 试试呢
.MappingException: Unknown entity: java.lang.String
org.hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:550)
org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1338)
org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:78)
org.hibernate.event.def.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:52)
org.hibernate.impl.SessionImpl.fireDelete(SessionImpl.java:766)
org.hibernate.impl.SessionImpl.delete(SessionImpl.java:744)
org.springframework.orm.hibernate3.HibernateTemplate$25.doInHibernate(HibernateTemplate
是以学生作为主控 remove掉 course后 hibernate就会自动删除相关中间表数据,不需要执行
this.userService.saveOrUpdate(user);
你下面有运行了一句
course.getUserSet().remove(user);
如果这句想达到实现删除中间表的目的就需要把 course 也设为主控方。以达到学生和课程都能维护中间表的目的。
User user = this.userService.findUserById((Integer) sessionMap
.get("userid"));
Set<Course> cs = user.getCourses();
for (Course c : cs) {
c.getUsers().remove(user);
}
session.delete(user);
session.getTransaction().commit();
session.close();
加个中间关系表,分成一对多和多对一的关系。然后就简单了
中间表大概是这样:
ID UserId CourseId.
分别是2个表的外键
先删除表中的记录 如果删除成功
在删除 中间表中的记录
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select courseset0_.stu_id as stu1_1_, courseset0_.course_id as course2_1_, course1_.id as id4_0_, course1_.name as name4_0_ from student_course courseset0_ left outer join course course1_ on courseset0_.course_id=course1_.id where courseset0_.stu_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
2\这是点击删除某门课程后的sql代码,如果不加this.userService.saveOrUpdate(user); 中间的updae语句就没有 剩下的都是select语句,根本就没有删除的语句
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select courseset0_.stu_id as stu1_1_, courseset0_.course_id as course2_1_, course1_.id as id4_0_, course1_.name as name4_0_ from student_course courseset0_ left outer join course course1_ on courseset0_.course_id=course1_.id where courseset0_.stu_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select course0_.id as id4_0_, course0_.name as name4_0_ from course course0_ where course0_.id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select courseset0_.stu_id as stu1_1_, courseset0_.course_id as course2_1_, course1_.id as id4_0_, course1_.name as name4_0_ from student_course courseset0_ left outer join course course1_ on courseset0_.course_id=course1_.id where courseset0_.stu_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select course_.id, course_.name as name4_ from course course_ where course_.id=?
Hibernate: select course_.id, course_.name as name4_ from course course_ where course_.id=?
Hibernate: select course_.id, course_.name as name4_ from course course_ where course_.id=?
Hibernate: select course_.id, course_.name as name4_ from course course_ where course_.id=?
Hibernate: update users set firstname=?, lastname=?, age=? where id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select courseset0_.stu_id as stu1_1_, courseset0_.course_id as course2_1_, course1_.id as id4_0_, course1_.name as name4_0_ from student_course courseset0_ left outer join course course1_ on courseset0_.course_id=course1_.id where courseset0_.stu_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select userset0_.course_id as course2_1_, userset0_.stu_id as stu1_1_, user1_.id as id0_0_, user1_.firstname as firstname0_0_, user1_.lastname as lastname0_0_, user1_.age as age0_0_ from student_course userset0_ left outer join users user1_ on userset0_.stu_id=user1_.id where userset0_.course_id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Hibernate: select user0_.id as id0_0_, user0_.firstname as firstname0_0_, user0_.lastname as lastname0_0_, user0_.age as age0_0_ from users user0_ where user0_.id=?
Map sessionMap = ActionContext.getContext().getSession(); User user = this.userService.findUserById((Integer) sessionMap
.get("userid"));
Course course = this.courseService.findCourseById(id);
if (user == null)
{
System.out.println("user null");
}
if (course == null)
{
System.out.println("course null");
}
if (course.getUserSet().contains(user))
{
System.out.println("true");
course.getUserSet().remove(user);
} else
{
System.out.println("false");
}