2

我需要一些有关休眠注释的帮助。

我有以下 2 个实体:

public class Custom {
 private Map<KeyObject, ValueObject> properties;

 @oneToMany(mappedBy = "customId", cascade = CascadeType.All)
 @MapKey(name = "keyObject")
 public Map<KeyObject, ValueObject> getProperties();

.....
}

public class ValueObject {
 private KeyObject keyObject;
 private Long customId;
 private String value;

...getters and setters
}

我有一个简单的 dao 类来保存、更新、选择和删除记录。

如果我从 Custom 对象中的地图中删除一条记录,然后调用 customDao.save(custom) 我的更改永远不会保存到数据库中。它也没有抛出任何错误。

我在休眠示例中看到我可以将 customId 定义为自定义对象,而不是 KeyValue 表中的 Long,但我不想这样做。

我是否错误地设置了我的实体?

4

1 回答 1

4

当一个关联具有该mappedBy属性时,意味着:我不是这个关联的所有者。对关联这一端所做的任何更改对 Hibernate 都无关紧要。重要的是协会的另一面。

我很惊讶这甚至可以工作,因为我本来希望 Hibernate 在另一边需要一个 ManyToOne 类型的Custom. 但是可以确定的是,如果在 KeyValue/ValueObject 中没有将 custom/customId 字段设置为 null,Hibernate 不会将此列设置为 null。

于 2012-06-06T17:02:14.337 回答