Java 多对多协会。数据不';不删除
我有这个模型:Java 多对多协会。数据不';不删除,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,我有这个模型: @Entity @Table(name = "candidate") @XmlRootElement(name = "candidate") public class Candidate{ @ManyToMany(mappedBy = "candidates", fetch = FetchType.EAGER) @XmlTransient public Set<Vacancy> getVacancies() { return vacan
@Entity
@Table(name = "candidate")
@XmlRootElement(name = "candidate")
public class Candidate{
@ManyToMany(mappedBy = "candidates", fetch = FetchType.EAGER)
@XmlTransient
public Set<Vacancy> getVacancies() {
return vacancies;
}
....
}
候选人:
@Override
public boolean update(Candidate candidate) throws HibernateException{
Session session = sessionFactory.getCurrentSession();
if (candidate == null) {
return false;
}
session.update(candidate);
return true;
}
我有奇怪的行为。如果我给应聘者增加新的职位空缺,效果会很好。但是,如果我删除空缺,这是行不通的
这对我来说是不理解的。当你从候选人名单中删除空缺时,别忘了从空缺名单中删除候选人,反之亦然。还请记住:如果您的系统中有某个位置稍后发送已删除的空缺(反之亦然),则该实体将再次保留
@RequestMapping("/saveCandidate")
public String saveCandidate(
Model model,
@ModelAttribute("candidateFromRequest") Candidate candidateFromRequest,
@ModelAttribute("vacanciesForCandidate") Set<Vacancy> vacanciesForCandidate,
RedirectAttributes redirectAttributes) {
candidateService.updateCandidateAndLinkedEntities(candidateFromRequest,
vacanciesForCandidate,...);
...
}
@Transactional
@Service("candidateService")
public class CandidateService {
public void updateCandidateAndLinkedEntities(Candidate candidate,
Set<Vacancy> vacancies, ...) {
if (candidate == null)
throw new NullPointerException("null candidate entity");
if (vacancies != null) {
candidate.setVacancies(vacancies);
for (Vacancy vacancy : vacancies) {
vacancy.getCandidates().add(candidate);
vacancyDao.update(vacancy);
}
}
candidateDao.update(candidate);//here all right, how I wish(I am about state of candidate entity)
}
...
}
@Override
public boolean update(Vacancy vacancy) throws HibernateException {
Session session = sessionFactory.getCurrentSession();
if (vacancy == null) {
return false;
}
session.update(vacancy);
return true;
}
@Override
public boolean update(Candidate candidate) throws HibernateException{
Session session = sessionFactory.getCurrentSession();
if (candidate == null) {
return false;
}
session.update(candidate);
return true;
}