2013-02-11 1 views
0

사용자 추가가 정상적으로 작동합니다. 문제는 입니다. 작업이 추가되고 있습니다. n 해당 사용자가 추가되고 있지만 사용자 테이블에 '새 사용자가 추가 될 때마다'추가됩니다. 이것은 브리지 테이블에있는 taskid n 사용자 ID의 불일치로 이어지고 있습니다. 누구든지이 ... 내 POJOS 사용자 n 작업 아래에있는 정말 .... 호출은 JSP 파일에 의해 수행됩니다 ... 그것에 어떤 도움을 기다리고 !! hibernate many to many annotation을 사용하는 동안 db에 중복 레코드가 삽입되는 것을 방지하는 방법

@Entity 
@Table(name ="Tasks") 
public class Tasks implements Serializable 
{ 
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column (name = "t_Id") 
private int Id; 
@Column (name = "t_Name") 
private String TaskName; 
@Column (name = "t_Details") 
private String TaskDetails; 
@Column (name = "t_Status") 
private int TaskStatus; 
@ManyToMany(targetEntity = org.Users.class, fetch = FetchType.LAZY, cascade =  {CascadeType.ALL, CascadeType.PERSIST}) 
//@Cascade({ CascadeType.ALL}) 
@JoinTable(name = "user_Tasks", joinColumns = {@JoinColumn(name = "t_Id")}, inverseJoinColumns = {@JoinColumn(name = "u_Id")}) 
private Set <Users> users = new HashSet<Users>(0); 

public Tasks(){} 
public Tasks(String TaskName) { 
    this.TaskName = TaskName; 
} 

public Tasks(String TaskName, String TaskDetails, int TaskStatus) { 
    this.TaskName = TaskName; 
    this.TaskDetails = TaskDetails; 
    this.TaskStatus = TaskStatus; 
} 

public Tasks(String TaskName, String TaskDetails, int TaskStatus, Set<Users> users) 
{ 
    this.TaskName = TaskName; 
    this.TaskDetails = TaskDetails; 
    this.TaskStatus = TaskStatus; 
    this.users = users; 
} 
public int getId() { 
    return Id; 
} 
public void setId(int Id) { 
    this.Id = Id; 
} 
public String getTaskName() { 
    return TaskName; 
} 
public void setTaskName(String TaskName) { 
    this.TaskName = TaskName; 
} 
public String getTaskDetails() { 
    return TaskDetails; 
} 
public void setTaskDetails(String TaskDetails) { 
    this.TaskDetails = TaskDetails; 
} 
public int getTaskStatus() { 
    return TaskStatus; 
} 
public void setTaskStatus(int TaskStatus) { 
    this.TaskStatus = TaskStatus; 
} 
public Set<Users> getUsers() { 
    return users; 
} 
public void setUsers(Set<Users> users) { 
    this.users = users; 
} 

} 
@Entity 
@Table(name = "USERS") 
public class Users implements Serializable { 
@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "u_Id") 
private int Id; 
@Column (name ="u_Name")   
private String Name; 
@Column (name ="u_Username") 
private String Username; 
@Column (name="u_Password") 
private String password; 
@ManyToMany(targetEntity =org.Tasks.class, fetch = FetchType.LAZY, mappedBy="users", cascade ={CascadeType.ALL, CascadeType.PERSIST}) 
// @Cascade({CascadeType.ALL}) 
@JoinTable(name = "user_Tasks", joinColumns = {@JoinColumn(name = "u_Id")}, inverseJoinColumns = {@JoinColumn(name = "t_Id")}) 
private Set<Tasks> task = new HashSet<Tasks>(); 
public Users(){} 
public Users(String Name) { 
    this.Name = Name; 
} 

public int getId() { 
    return Id; 
} 
public void setId(int Id) { 
    this.Id = Id; 
} 
public String getName() { 
    return Name; 
} 
public void setName(String Name) { 
    this.Name = Name; 
} 
public String getUsername() { 
    return Username; 
} 
public void setUsername(String Username) { 
    this.Username = Username; 
} 
public String getPassword() { 
    return password; 
} 
public void setPassword(String password) { 
    this.password = password; 
} 

public Set<Tasks> getTask() { 
    return task; 
} 

public void setTask(Set<Tasks> task) { 
    this.task = task; 
} 
@Override 
public int hashCode() { 
    int hash = 7; 
    hash = 19 * hash + (this.Name != null ? this.Name.hashCode() : 0); 
    hash = 19 * hash + (this.Username != null ? this.Username.hashCode() : 0); 
    hash = 19 * hash + (this.password != null ? this.password.hashCode() : 0); 
    return hash; 
} 
@Override 
public boolean equals(Object obj) { 
    if (obj == null) { 
     return false; 
    } 
    if (getClass() != obj.getClass()) { 
     return false; 
    } 
    final Users other = (Users) obj; 
    if ((this.Name == null) ? (other.Name != null) : !this.Name.equals(other.Name)) { 
     return false; 
    } 
    if ((this.Username == null) ? (other.Username != null) : !this.Username.equals(other.Username)) { 
     return false; 
    } 
    if ((this.password == null) ? (other.password != null) : !this.password.equals(other.password)) { 
     return false; 
    } 
    return true; 
} 

} 

public class ManageTasks 

    public static void main(String arg[]) 
    { 
    try 
    { 
    SessionFactory factory = new AnnotationConfiguration().configure().addPackage("org").addAnnotatedClass(Tasks.class).addAnnotatedClass(Users.class).buildSessionFactory();   
    }catch(Exception e) 
    { 
    System.out.println(e); 
    } 

    } 
    public Integer addTasks(String TaskName, String TaskDetails, int TaskStatus, Set use) 
    { 
    SessionFactory factory = new AnnotationConfiguration().configure().addPackage("org").addAnnotatedClass(Tasks.class).addAnnotatedClass(Users.class).buildSessionFactory(); 
    Session session = factory.openSession(); 
    Transaction tx = null; 
    Integer taskID = null; 
    try 
    { 
     tx = session.beginTransaction(); 
     Tasks task = new Tasks(TaskName, TaskDetails, TaskStatus); 
     task.setUsers(use); 

     session.save(task); 
     tx.commit();  
    }catch(HibernateException e) 
    { 
    if(tx!=null) tx.rollback(); 
    e.printStackTrace(); 
    } 
    finally 
      { 
       session.close(); 
      }  
    return taskID; 
    }  
    public void addUser(String name, String username, String password) 
{ 
    SessionFactory factory = new AnnotationConfiguration().configure().addPackage("org").addAnnotatedClass(Users.class). 
        buildSessionFactory(); 
    Session session = null; 
    session = factory.openSession(); 
    Transaction tx = null; 
    Integer userID = null; 
    try 
    { 
    tx = session.beginTransaction(); 
    Users user = new Users(); 
    user.setName(name); 
    user.setUsername(username); 
    user.setPassword(password); 
    userID = (Integer) session.save(user); 
    tx.commit(); 
    }catch (HibernateException e) 
    { 
    if (tx!=null) tx.rollback(); 
    e.printStackTrace(); 
    } 
    finally 
    { 
    session.close(); 
    } 

} 

여기

String taskname = request.getParameter("taskname"); 
String taskdetails = request.getParameter("taskdetails"); 
tring user1 = request.getParameter("user1"); 
String user2 = request.getParameter("user2"); 
String user3 = request.getParameter("user3"); 
Set <Users> user = new HashSet <Users>(); 
user.add(new Users(user1)); 
user.add(new Users(user2)); 
user.add(new Users(user3)); 
nt TaskStatus; 
if(taskname == null && taskdetails == null) 
TaskStatus = 0; 
else 
TaskStatus = 1; 

ManageTasks mt = new ManageTasks(); 
mt.addTasks(taskname, taskdetails, TaskStatus, user); 
out.println("Sucessfully added!!"); 

답변

0

당신은 이미 ID가 DB에서 검색 한 사용자를 추가하는 데 필요한 작업을 만들 코드를 호출 AddTask입니다. 이 방법으로 Hibernate는 새로운 사용자를 삽입하지 않고, 작업 엔티티가 지속될 때 조인 테이블의 엔트리 만 삽입합니다.

새 작업을 만드는 코드에서 새 작업을 만드는 대신 기존 사용자를 찾아야합니다. 와
user.add(new Users(user1));
: user.add(findUserByName(user1));

+0


예 내가 그것을 시도하지만 난이 오류를 제거하지 못할 그래서 당신은 DB에서 사용자를 검색하고 대체하는 방법 findUserByName(String name)를 작성해야합니다. u는 내 파일에서 변경해야합니다 코드 조각을 제안 할 수 있습니다 .... 내가 그렇게 긴급하게 필요 ..... ur 도움말에 대한 방법에 의해 thanxx하지만 좀 더 도움이 필요해 ... – user2062376

+0

나는 문제가 있다고 생각합니다 코드에서 addTask를 호출합니다. 추가 도움이 필요하면 해당 코드를 게시하십시오. – Bogdan

+0

안녕하세요, 코드를 게시했습니다 ..... plz help ....... thanxx를 미리 .. – user2062376