我需要休眠注释的帮助。

我有以下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定义为Custom对象,而不是KeyValue表中的Long,但是我不想这样做。

我的实体设置不正确吗?

最佳答案

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

令我惊讶的是,这甚至行不通,因为我希望Hibernate在另一端要求类型为Custom的ManyToOne。但是可以确定的是,如果您没有在KeyValue / ValueObject中将custom / customId字段设置为null,则Hibernate不会将此列设置为null。

关于java - hibernate 注释Java映射,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10918621/

10-10 18:11