[jboss-user] [Persistence,JBoss/CMP, Hibernate, Database] - How to delete relations in entities, id´s are not the
NSchweig
do-not-reply at jboss.com
Thu Dec 18 07:01:16 EST 2008
Hi,
I have a webapplication with jsf and ejb.If I try to delete relations between entities I always run into the same problem. The id of the objects are not the same so I can delete them from the list.
For example:
Relation Course/CmtUser
Course.java
| @ManyToMany(fetch=FetchType.EAGER)
| @IndexColumn(name="INDEX_COL")
| private List<CmtUser> participants = new ArrayList<CmtUser>();
CmtUser.java
@ManyToMany(mappedBy="members", fetch=FetchType.EAGER)
| @IndexColumn(name="INDEX_COL")
| private List <CmtGroup> groups = new ArrayList<CmtGroup>();
Joining a course is not the problem:
JSF-managedbean CourseBean:
public void joinCourse(){
| currentUser = userHandler.getCmtUserByUserName(getRemoteUserName());
| courseHandler.joinCourse(getCurrentCourseId(),currentUser);
| }
But if I try to "leave a course" (delete user from course-participant-list) it does not work.
I tried it in several ways:
1. Way
The managedbean CourseBean invokes the handler and gives the objects to it:
public void leaveCourse(){
| courseHandler.leaveCourse(currentCourse, currentUser);
| }
Then in the handler I tried to remove the user from the course and vice versa
public void leaveCourse(Course c, CmtUser user) {
| c.getParticipants().remove(user);
| user.getCourses().remove(c);
| em.merge(c);
| em.merge(user);
| }
Problem: Cannot remove the user from c. participants because the id from the user I not the same as the user in the list participants.
The same problem in the 2. Way
2. Way
The managedbean CourseBean invokes the handler:
public void leaveCourse(){
| courseHandler.leaveCourse(currentCourse.getId(), currentUser.getId());
| }
CourseHandler.java
public void leaveCourse(Long courseId, Long userId) {
| Course course = getCourse(courseId);
| CmtUser user = userHandler.getCmtUser(userId);
|
| course.getParticipants().remove(user);
| user.getCourses().remove(course);
| em.merge(user);
| em.merge(course);
| }
If I look into course.participants the id from the user in it is another than the id from the user I got with my userHandler with userHandler.getCmtUser(userId);.
3. Way:
I remove the elements from the list in the jsfmanagedbean CourseBean:
public void leaveCourse(){
| currentCourse.getParticipants().remove(currentUser);
| currentUser.getCourses().remove(currentCourse);
| courseHandler.updateCourse(currentCourse);
| userHandler.updateUser(currentUser);
| }
The only thing I do in the ejbhandler is to update the objects:
CourseHandler.java
public void updateCourse(Course course) {
| em.merge(course);
| }
|
UserHandler.java
public void updateUser(CmtUser cmtUser) {
| em.merge(cmtUser);
| }
But it is the same problem.
How do I solve this? Which is the best way to implement this things; in the jsfmanagedbean or in the ejbhandlers?
Please I need your help.
Thanks Nicki
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4197325#4197325
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4197325
More information about the jboss-user
mailing list