我正在使用EclipseLink,我想知道在更新或创建JPA
时是否有办法避免对Entity
的集合进行Entity
操作。我有一个Entity
,其中包含以下集合:
@OneToMany(mappedBy = "pageItemAssignment")
private Collection<AllowedUrl> allowedUrls;
当我更新父实体时,从集合中添加或删除的任何内容都将具有jpa持久化/删除操作。我不希望任何这种情况发生。我只希望在检索父实体并忽略所有其他操作时填充集合。我将拥有将持久化/更新/删除集合中的实体的代码。
我是否可以在关系上配置忽略操作的配置?
感谢。
答案 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
。