Java 在hibernate中使用sessionfactory持久化之前检索主键ID
在持久化对象之前,我使用以下代码在hibernate中获取主键。但它会在DB中插入重复的行 我面临的问题是: 1.我得到主键的两个值。当我在持久化Person对象之前调用flushPerson()方法获取“id”时。 2.其他当我调用save方法来保存Person对象时。在这个方法中,“Id”也在递增 PersonController.javaJava 在hibernate中使用sessionfactory持久化之前检索主键ID,java,hibernate,spring-mvc,Java,Hibernate,Spring Mvc,在持久化对象之前,我使用以下代码在hibernate中获取主键。但它会在DB中插入重复的行 我面临的问题是: 1.我得到主键的两个值。当我在持久化Person对象之前调用flushPerson()方法获取“id”时。 2.其他当我调用save方法来保存Person对象时。在这个方法中,“Id”也在递增 PersonController.java public Person createNewPerson(String .....){ Person per = new Person();
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);
}
@Override
public void flushPerson(Person per) {
sessionFactory.getCurrentSession().persist(per);
sessionFactory.getCurrentSession().flush();
}
@Override
public void save(Person per) {
sessionFactory.getCurrentSession().save(per);
}
PersonHibernateDao.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);
}
@Override
public void flushPerson(Person per) {
sessionFactory.getCurrentSession().persist(per);
sessionFactory.getCurrentSession().flush();
}
@Override
public void save(Person per) {
sessionFactory.getCurrentSession().save(per);
}
我错过了什么?我只想用flush方法中创建的主键“id”保存对象,它应该只插入一行。将保存方法更改为:
@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
在数据库中保存时,Person p=personManager.save(per);sout(p.getId());打印并检查您是否获得了id,如果您获得了id,请返回:)@Navin Gelot我获得了id,但问题是,我获得了两个递增的id。在中,当我调用flushPerson()ex时:假设这里的“id”是5,在这里它存储一行,主键是5,在DB中。另一个在save(Person)中,它将6作为主键存储在数据库中。然后只使用flush()和save()中的一个,而不是两者都使用。如果我只使用flush(),事务将在当前会话中提交吗?