繁体   English   中英

与 JPA OneToMany 映射的只读关联

[英]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=falseinsertable=false ,然后将级联类型指定为 PERSIST 而不是 ALL @OneToMany(cascade = CascadeType.PERSIST)

@JoinColumn(name = "<ReadOnlyTableName>", updatable = false, insertable = false)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM