EclipseLink避免收集持续/删除

时间:2015-10-14 02:23:12

标签: jpa eclipselink

我正在使用EclipseLink,我想知道在更新或创建JPA时是否有办法避免对Entity的集合进行Entity操作。我有一个Entity,其中包含以下集合:

@OneToMany(mappedBy = "pageItemAssignment")
private Collection<AllowedUrl> allowedUrls;

当我更新父实体时,从集合中添加或删除的任何内容都将具有jpa持久化/删除操作。我不希望任何这种情况发生。我只希望在检索父实体并忽略所有其他操作时填充集合。我将拥有将持久化/更新/删除集合中的实体的代码。

我是否可以在关系上配置忽略操作的配置?

感谢。

3 个答案:

答案 0 :(得分:0)

据我所知,您不希望将某些字段状态持久保存到DB。您可以使用注释@Transient

瞬态实体字段是不参与持久性的字段,它们的值永远不会存储在数据库中。

@Entity
public class MyEntity  {
     ....
    @Transient 
     String url; // not persistent because of @Transient
} 

答案 1 :(得分:0)

我想我一直在以错误的方式解决这个问题。我的新集合项上的自动持久性是离开集合项而没有id值。我希望通过避免该过程来控制保存/更新。

相反,我选择刷新父实体,以便刷新集合,以便每个新集合在持久化后都具有id。现在我需要编写的唯一代码是更新,因为这是唯一不会自动触发的代码。

答案 2 :(得分:0)

假设数据库中已有实体,您可以通过将给定字段定义为只读来避免刷新内存中的更改。在您的特定情况下,这可能如下所示:

@OneToMany(mappedBy="pageItemAssignment")      //non-owning side of the relationship
private Collection<AllowedUrl> allowedUrls;

@ManyToOne                                     //owning side of the relationship
@JoinColumn(insertable=false, updatable=false) //read-only field
private PageItemAssigment pageItemAssignment;

这可以防止JPA提供程序执行任何操作,只能从数据库中读取关系(不会插入FK,但会插入其他字段)。 这种方法适用于以下注释:@Column@OrderColumn@JoinColumn@MapKeyColumn@MapKeyJoinColumn