我需要休眠注释的帮助。
我有以下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/