如果在以下场景中有更好的方法进行插入/更新,我正在努力解决这个问题。我有两个班:
public class Person {
private int id;
private String firstName;
private String lastName;
private Family family;
...
}
public class Family {
private int id;
private String name;
...
}
两者中的主键是Id(我希望为此练习保留这种方式)。人与家庭之间存在多对一的关系,因此很多人可以拥有同一个家庭。我的输入法允许你设置任何族值,但我在插入之前检查它是否存在:
public void savePerson(Person person) {
System.out.println("Saving person");
Family existingFamily = getFamily(person.getFamily().getName());
if (existingFamily != null) {
person.setFamily(existingFamily);
}
sessionfactory.getCurrentSession().saveOrUpdate(person);
}
...
public Family getFamily(String name) {
System.out.println("Getting family: " + name);
Family family
= (Family) sessionfactory.getCurrentSession().createQuery("from Family where name = :name")
.setParameter("name", name)
.uniqueResult();
return family;
}
我的问题是,这可以通过hibernate以某种方式自动完成(我有点新手)或者我是否总是需要事先检查数据库中的现有对象(并更新Person)?
干杯
条司
答案 0 :(得分:1)
您可以使用get()
方法检查现有对象,而不是撰写HQL query
示例:
public boolean getFamily(int famId) {
Family family = (Family)sessionfactory.getCurrentSession().get(Family.class,famId);
if(family!=null){
return true;
}
else{
return false;
}
}
这就是我在项目中的做法。get()
方法返回Object,如果它出现在DB中,则返回null。