Java 与JPA OneToMany映射的只读关联

Java 与JPA OneToMany映射的只读关联,java,spring,hibernate,jpa,orm,Java,Spring,Hibernate,Jpa,Orm,我有一个与另一个实体关联的事务实体,因此在案例中不应更新关联的实体 例如,案例*->用户 案例由用户拥有,反过来,用户可以拥有多个关联案例 使用OneToMany和JoinColumn JPA注释映射关联 我还尝试将用户实体的Trasactional注释标记为readonly,并使fetch方法暂时化。但若用户的状态发生变化,这似乎不会停止用户的更新 请帮助我找到一个向用户声明“只读”关联的方法。您可以在@JoinColumn注释中添加updateable=false 此外,您不应在案例实体中为

我有一个与另一个实体关联的事务实体,因此在案例中不应更新关联的实体

例如,案例*->用户

案例由用户拥有,反过来,用户可以拥有多个关联案例

使用OneToMany和JoinColumn JPA注释映射关联

我还尝试将用户实体的Trasactional注释标记为readonly,并使fetch方法暂时化。但若用户的状态发生变化,这似乎不会停止用户的更新


请帮助我找到一个向用户声明“只读”关联的方法。

您可以在@JoinColumn注释中添加
updateable=false

此外,您不应在
案例
实体中为
用户
添加setter方法,也不应在
用户
实体中为
案例集
添加setter方法。
User
实体中的getter
getCaseSet
也应返回不可修改的集合:

public Set<Case> getCaseSet() {
    return Collections.unmodifiableSet(caseSet);
}
publicset getCaseSet(){
返回集合。不可修改集(caseSet);
}
Column注释和XML元素定义了可插入和可更新的选项。这些允许在SQL INSERT或UPDATE语句中省略此列或外键字段。如果表上的约束阻止插入或更新操作,则可以使用这些约束。如果多个属性映射到同一数据库列,例如通过manytone和Id或基本映射使用外键字段,也可以使用它们。将insertable和Updateable都设置为false,可以有效地将属性标记为只读

@OneToMany
映射中,
@JoinColumn
注释中,添加可更新=false和
可插入=false
,然后将级联类型指定为PERSIST而不是ALL
@OneToMany(cascade=CascadeType.PERSIST)

@JoinColumn(name=”“,updateable=false,insertable=false)

在与此进行斗争后,我的一天得以保存。确保不添加可为空的
@JoinColumn(name = "<ReadOnlyTableName>", updatable = false, insertable = false)