休眠:检查对象是否存在/已更改

时间:2010-01-18 21:40:27

标签: java database hibernate orm jpa

假设我有一个对象人物

long id
String firstName
String lastName
String address

然后我在我的应用程序中的某处生成一个Person-object。现在我想检查数据库中是否存在此人(= firstname / lastname-combination在数据库中)。如果不是=>插入它。如果是,请检查地址是否相同。如果不是=>更新地址。

当然,我可以做一些请求(首先,尝试使用firstname / lastname加载对象),然后(如果存在),比较地址。但是,有没有更简单,更清洁的方法?如果有几个不同的类,并且不喜欢有这么多的查询。

我想使用注释,好像在说: firstname / lastname =>他们是主要的关键。如果对象存在,请检查它们。

地址是您必须比较的参数,如果它保持不变。

Hibernate / JPA(或其他框架)是否支持这样的东西?

pseude代码:

if (database.containsObject(person)) { //containing according to compound keys
     if (database.containsChangedObject(person)) {
              database.updateObject(person);
     }
} else {
     database.insertObject(person);
}

1 个答案:

答案 0 :(得分:1)

  

我想使用注释,如果说:firstname / lastname =>他们是主要的关键。如果对象存在,请检查它们。

您可以使用以下两种注释之一声明复合主键:@IdClass@EmbeddedId。有关详细信息,请查看Compound Primary Keys with Hibernate and JPA Annotations

但是,如果您希望能够插入具有相同名字/姓氏和不同地址的两个人,则必须在密钥中包含该地址。

请注意,最佳做法是使用数字代理主键,即主键仅用作标识符且在应用程序中没有业务含义。