![](/img/trans.png)
[英]JPA - Mapping OneToMany association between the same table using an intermediate table
[英]Read-only association with JPA OneToMany mapping
我有一个关联到另一个实体的交易实体,因此不应在案例中更新关联实体。
例如。 案例 *-> 用户
如果一个案例由一个用户拥有,相反,一个用户可以有许多关联的案例。
该关联使用 OneToMany 和 JoinColumn JPA 注释进行映射。
我还尝试将 User 实体的 Trasactional 注释标记为只读,并将获取方法设置为 Transient。 但是,如果用户的状态发生变化,这似乎不会停止对用户的更新。
请帮我想出一种向用户声明“只读”关联的方法。
您可以在 @JoinColumn 注释上添加 updatable updatable=false
。
此外,您不应在Case
实体中为user
添加 setter 方法,也不应在User
实体中为caseSet
添加 setter 方法。 User
实体中的 getter getCaseSet
也应该返回一个不可修改的集合:
public Set<Case> getCaseSet() {
return Collections.unmodifiableSet(caseSet);
}
Column 注释和 XML 元素定义了可插入和可更新的选项。 这些允许从 SQL INSERT 或 UPDATE 语句中省略此列或外键字段。 如果表上的约束阻止插入或更新操作,则可以使用这些。 如果多个属性映射到同一数据库列,例如通过 ManyToOne 和 Id 或 Basic 映射的外键字段,也可以使用它们。 将 insertable 和 updatable 都设置为 false,有效地将属性标记为只读。
在@OneToMany
映射中,@JoinColumn 注解,同时添加@JoinColumn
updatable=false
和insertable=false
,然后将级联类型指定为 PERSIST 而不是 ALL @OneToMany(cascade = CascadeType.PERSIST)
@JoinColumn(name = "<ReadOnlyTableName>", updatable = false, insertable = false)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.