当hibernate设置主键(id)?

时间:2013-09-26 06:55:34

标签: java hibernate jpa orm

我有这段代码:

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;

}

我认为如果候选人处于持续状态,就会发生这种情况。

我搞砸了。

1 个答案:

答案 0 :(得分:1)

由于ID是表candiate的主键,因此当您将其添加到数据库时,Id会生成并由save方法返回。

如果您看到save method的文档。

  

保留给定的瞬态实例,首先分配生成的标识符。 (或者,如果使用指定的生成器,则使用标识符属性的当前值。)如果使用cascade =“save-update”映射关联,则此操作会级联到关联的实例。

     

返回:   生成的标识符