在更新之前选择Hibernate

时间:2014-06-25 12:37:51

标签: hibernate

如果在以下场景中有更好的方法进行插入/更新,我正在努力解决这个问题。我有两个班:

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)?

干杯

条司

1 个答案:

答案 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。