EclipseLink 不删除私有的一对多项目
Posted
技术标签:
【中文标题】EclipseLink 不删除私有的一对多项目【英文标题】:EclipseLink not removing privately owned one-to-many item 【发布时间】:2011-11-08 19:40:20 【问题描述】:我无法让 Eclipselink 删除映射为一对多关系的私有实体。当我从一对多集合中删除私有实体并将对其父级的引用设置为 NULL 然后保存父级时,私有实体不会从数据库中删除。但是,它已从对象中移除,并且在会话的剩余时间内,私有实体似乎实际上已被移除。
这是一个映射
@OneToMany(mappedBy="parent", cascade=CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH, fetch=FetchType.EAGER)
@PrivateOwned // should prevent orhpans, but doesn't.
List<PrivatelyOwnedEntity> privatelyOwnedEntities;
我尝试添加所有级联,还添加了@CascadeOnDelete,以及它们的每一种组合,人们认为这不会产生影响,但事实并非如此。
另一边:
@ManyToOne
private Parent parent;
我尝试添加 JoinColumn(nullable=false) 并删除 @ManyToOne 注释,以及这些注释的存在/删除的每个组合。这些更改都没有任何影响。
删除代码:
public boolean removePrivatelyOwnedEntity(int i)
PrivatelyOwnedEntity privatelyOwnedEntityToBeRemoved = this.privatelyOwnedEntities.get(i);
//privatelyOwnedEntityToBeRemoved.setParent(null);
return this.privatelyOwnedEntities.remove(privatelyOwnedEntityToBeRemoved );
更新代码:
projectManager.saveProject(project);
//so this privatelyOwnedEntity is deep within this object.
// Its project.site.siteMap.parents.privatelyOwnedEntities.
// SiteMap is embedded in Site.
// On save it calls a dao, and the dao's abstract class handles the update
// as shown below using Springs JpaTemplate
保存代码:
public T save(T object)
return getJpaTemplate().merge(object);
【问题讨论】:
你能显示用于在父级中读取的代码,进行更改并持久化吗? 当然,我在上面添加了附加代码 【参考方案1】:是对象id的父部分吗?
尽量不要将 parent 设置为 null,您不应该对私有对象执行此操作,只需将它们从集合中删除即可。
【讨论】:
感谢您的回复。不幸的是,这并没有奏效。还有其他想法吗?我不确定您所说的“是对象 id 的父部分”是什么意思私有实体对 id 使用身份策略。 @GeneratedValue(strategy=GenerationType.IDENTITY)以上是关于EclipseLink 不删除私有的一对多项目的主要内容,如果未能解决你的问题,请参考以下文章