在Hibernate中持续使用sessionfactory之前检索主键ID

时间:2018-08-10 07:47:30

标签: java hibernate spring-mvc

在持久化对象之前,我曾使用以下代码在休眠中获取主键。但是它在数据库中插入重复的行。

我在这里面临的问题是: 1.我得到两个主键值。当我在持久化Person对象之前调用flushPerson()方法获取“ id”时,出现一个。 2.其他当我调用save方法时,保存Person对象。在这种方法中,“ Id”也会递增。

PersonController.java

public Person createNewPerson(String .....){
    Person per = new Person();
    personManager.flushPerson(per);
    RandomNumberGenerator rng = new RandomNumberGenerator();
    String randomStrng = rng.generateRandomNumber();
    String cientCode = per.getId()+randomStrng;
    per.setPersonClientCode(cientCode);
    per.setPersonClient();
    per.setPersonField();
    personManager.save(per);
}

PersonH​​ibernateDao.java

@Override
public void flushPerson(Person per) {       
    sessionFactory.getCurrentSession().persist(per);
    sessionFactory.getCurrentSession().flush(); 
}

@Override
public void save(Person per) {
    sessionFactory.getCurrentSession().save(per);
}

我在这里想念什么?我要保存仅包含在刷新方法中创建的主键“ id”的对象,并且该对象只能插入一行。

1 个答案:

答案 0 :(得分:0)

将保存方法更改为:

@Override
public Person save(Person per) {
 return sessionFactory.getCurrentSession().save(per);
}

然后,在PersonController中,您可以执行以下操作:

Person per = new Person();
//whatever Mutators you need
per = personManager.save(per);
//Now you can get id and no duplicate rows will be inserted