Hi Leute,
in meiner Web-App soll es möglich, dass ein Berater(Consultant) Kunden (Customer) und Projekte(Project) anlegen kann. Es gibt bei der Web-App ein User-Managment und zwar so, dass ein User entweder ein Berater ist oder ein Kunde. Zwischen der Entity User und Project ist folgende m:n-Beziehung gemappt:
Mein Problem ist nun, dass ich bei 2 Usern die Projekte updaten muss und er sowohl beim ersten User als auch beim zweiten das neue Projekt in die DB schreibt bzw. schreiben will. Das ist natürlich nicht gewünscht. Vllt ist meine vorgehensweise nicht korrekt? Ich update bzw. persistiere zu erst den CustomerUser und anschließend den ConsultantUser. Der JavaCode sieht wie folgt aus:
ProjectWizardController.java:
UserDaoImpl:
Er versucht immer ein Project doppelt einzutragen. Wie kann ich das verhindern?
in meiner Web-App soll es möglich, dass ein Berater(Consultant) Kunden (Customer) und Projekte(Project) anlegen kann. Es gibt bei der Web-App ein User-Managment und zwar so, dass ein User entweder ein Berater ist oder ein Kunde. Zwischen der Entity User und Project ist folgende m:n-Beziehung gemappt:
Java:
...
@ManyToMany( cascade={CascadeType.ALL}, fetch=FetchType.EAGER)
@JoinTable( name = "User_Project",
joinColumns = {@JoinColumn( name="user_id")},
inverseJoinColumns = {@JoinColumn (name = "project_id")})
public List<Project> getProjects() {return this.projects; }
...
ProjectWizardController.java:
Java:
...
@Transactional
public void finalWizard(){
if( !this.selectedCatalog.equals(-1L))
try{
if( this.customer.getId() == null ){
this.user.setPassword(this.password);
this.user.addProject(project);
Map<String, GrantedAuthority> authorities = new LinkedHashMap<String, GrantedAuthority>();
this.messageController = new MessageController();
authorities.put(messageController.getMessage("user_role_"
+ Role.valueOf("CUSTOMER").toString()), new GrantedAuthorityImpl(Role.valueOf("CUSTOMER").toString()));
this.user.setAuthorities(authorities.values());
User consultantUser = this.userDao.getById(this.consultant.getUser().getId());
consultantUser.getProjects().add(this.project);
this.userDao.persist(this.user, this.customer, consultantUser);
//this.userDao.update(consultantUser, this.project);
}else{
User updateCustomer = this.userDao.getById(this.customer.getUser().getId());
updateCustomer.getProjects().add(this.project);
User updateConsultant = this.userDao.getById(this.consultant.getUser().getId());
updateConsultant.getProjects().add(this.project);
this.userDao.update(updateCustomer, updateConsultant);
}
this.increasePosition();
//this.userDao.update(this.customer.getUser(), this.project);
}catch(Exception e){
System.out.println(e.getMessage());
}
}
...
Java:
...
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager em;
...
public User update(User customer,User consultant){
em.merge(customer);
em.merge(consultant);
em.flush();
return consultant;
}
public void persist(User user, Customer customer, User consultant ){
em.persist(customer);
em.persist(user);
em.merge(consultant);
em.flush();
}
...