在持久化对象之前,我曾使用以下代码在休眠中获取主键。但是它在数据库中插入重复的行。
我在这里面临的问题是: 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);
}
PersonHibernateDao.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”的对象,并且该对象只能插入一行。
答案 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