假设我有一个对象人物
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);
}
答案 0 :(得分:1)
我想使用注释,如果说:firstname / lastname =>他们是主要的关键。如果对象存在,请检查它们。
您可以使用以下两种注释之一声明复合主键:@IdClass
或@EmbeddedId
。有关详细信息,请查看Compound Primary Keys with Hibernate and JPA Annotations。
但是,如果您希望能够插入具有相同名字/姓氏和不同地址的两个人,则必须在密钥中包含该地址。
请注意,最佳做法是使用数字代理主键,即主键仅用作标识符且在应用程序中没有业务含义。