을 저장 코드 :최대 절전 모드 @ManyToMany 나는 다음과 같이 내 코드에서 견인 테이블 (사용자 및 사업) 사이의 @ManyToMany 관계를 가지고
...
addWorkToUser(Work work,Integer idUser){
User user = new User();
user.setId(idUser);
Set<Work> worksList = new HashSet<Work>();
worksList.add(work);
user.setWorks(worksList);
getHibernateTemplate().saveOrUpdate(User)
}
...
문제는 내가 처음으로 새로운 작업에 영향을 미칠 때입니다. 하지만 내가 동일한 사용자에게 새로운 woks에 영향을 미칠 때 나는 마지막 작품 만 볼 수 있습니다 !!! 내가 코드를 디버깅 할 때 삭제 쿼리를 발견했습니다. 이 삭제 쿼리를 어떻게 건너 뛸 수 있습니까?
Hibernate: update User set name=? where id=?
Hibernate: delete from USER_WORK where USER_ID=?
Hibernate: insert into USER_WORK (USER_ID, WORK_ID) values (?, ?)
편집 : 내가 수동으로 실행하여 문제를 해결하기
는 는하지만 난 여전히 최고의 솔루션 :(
User User = (User) DataAccessUtils
.singleResult((getHibernateTemplate().find(
"From User WHERE id = ?", idUser)));
User.getWorks().add(work);
getHibernateTemplate().saveOrUpdate(User);
나는이 내 코드를 변경합니다. 세션 세션 = getHibernateTemplate를() getSessionFactory getCurrentSession()에(). ; session.beginTransaction(); 사용자 사용자 = (사용자) session.get (사용자. 클래스, idUser); 세트 groupsList = new HashSet (); groupsList.add (group); User.setGroups (groupsList); getHibernateTemplate(). saveOrUpdate (User); session.close(); 하지만 여전히 동일한 문제가 있습니다 –
z4k4r14
하나의 작업이 포함 된 새로운 세트로 대체하기 때문에 여전히 마찬가지입니다. 사용자가 가지고있는 일련의 작업에 작업을 추가해야합니다. 세트를 새 것으로 교체하지 마십시오. 'user.getGroups(). add (work);'. 지갑에 동전을 추가하면 새 지갑을 만들지 않고 동전을 새 지갑에 넣고 주머니에있는 지갑을 새 지갑으로 교체하십시오. 이미 동전이 들어있는 주머니에서 기존 지갑을 가져 와서 새 동전을 안에 넣으십시오. 여기와 같아. –
나는 그것을 시도하지만 그것은 나를 위해 작동하지 않았다. .. 나는 흐르는 기능을 시도해보십시오 공공 무효 addWorkToUser (작업 일, 정수 idUser) { \t \t 세션 세션 = getHibernateTemplate를() getSessionFactory getCurrentSession()에(); \t \t session.beginTransaction(); \t \t 사용자 사용자 = (사용자) session.get (사용자. 클래스, idUser); \t \t session.saveOrUpdate (work); \t \t User.getGroups(). add (work); \t \t 세션.saveOrUpdate (사용자); \t \t session.flush(); \t \t session.close(); } – z4k4r14