我有这段代码:
Candidate candidate = new Candidate();
candidate.setName("testUser");
candidate.setPhone("88888");
candidateService.add(candidate);
sessionFactory.getCurrentSession().flush();
return candidate;
CandidateService标记为@Transactional
;
你能解释一下执行candidateService.add(candidate);
后的原因吗?
候选人获得id字段值。
也许这是正常的?
candidateService.add(candidate) realization:
public void add(Candidate candidate) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String login = auth.getName();
User user = utilService.getOrSaveUser(login);
candidate.setAuthor(user);
candidateDao.add(candidate);
}
@Override
public Integer add(Candidate candidate) throws HibernateException{
Session session = sessionFactory.getCurrentSession();
if (candidate == null) {
return null;
}
Integer id = (Integer) session.save(candidate);
return id;
}
我认为如果候选人处于持续状态,就会发生这种情况。
我搞砸了。答案 0 :(得分:1)
由于ID是表candiate的主键,因此当您将其添加到数据库时,Id会生成并由save方法返回。
如果您看到save method的文档。
保留给定的瞬态实例,首先分配生成的标识符。 (或者,如果使用指定的生成器,则使用标识符属性的当前值。)如果使用cascade =“save-update”映射关联,则此操作会级联到关联的实例。
返回: 生成的标识符