2015-10-14 58 views
0

我正在使用EclipseLink,我想知道是否有方法可以在更新或创建Entity时避免对Entity集合执行JPA操作。我有一个Entity具有以下集合:EclipseLink避免收集持久/删除

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

凡是被添加或从集合中删除将有一个持续的JPA /删除操作时,我更新父实体。我不希望发生这种情况。我只想在检索父实体并忽略所有其他操作时填充集合。我将有代码将持久/更新/删除集合中的实体。

是否有配置可以配置关系忽略操作?

谢谢。

回答

0

我知道你不想将某些字段状态持久化到DB。你可以使用注释@Transient

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

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

这是我需要从数据库中提取的集合,所以@Transient在这里不起作用。 – user2677597

0

我想我一直在讨论这个错误的方法。自动保留我的新收藏项目是离开收集项目没有一个id值。我想通过避免这个过程来控制保存/更新。

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

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

+0

我在发布我的问题之前尝试过。父实体更新仍将尝试在集合中保留一个对象。将insertable设置为false将忽略外键的值,并尝试在所有其他字段的表中创建一行。由于外键验证,当然失败。 – user2677597