我有一个与另一个实体相关联的交易实体,在这种情况下不应更新相关联的实体。
EG。案例* - >用户
如果案例由用户拥有,则用户可以拥有许多相关案例。
使用OneToMany和JoinColumn JPA注释来映射关联。
我还尝试将User实体的Trasactional注释标记为readonly,并使得获取方法Transient。但是,如果用户的状态发生变化,这似乎不会停止更新。
请帮我说明一种向用户声明“只读”关联的方法。
答案 0 :(得分:2)
yiu可以在@JoinColumn注释上添加updatable=false
。
您不应该在user
实体中为Case
添加setter方法,在caseSet
实体中为User
添加相同的setter方法。 getCaseSet
实体中的getter User
也应该返回一个不可修改的集合:
public Set<Case> getCaseSet() {
return Collections.unmodifiableSet(caseSet);
}
答案 1 :(得分:0)
Column注释和XML元素定义可插入和可更新的选项。这些允许从SQL INSERT或UPDATE语句中省略此列或外键字段。如果表上的约束阻止插入或更新操作,则可以使用它们。如果多个属性映射到同一数据库列,例如通过ManyToOne和Id或Basic映射使用外键字段,则也可以使用它们。将可插入和可更新都设置为false,可以将该属性有效地标记为只读。
在@OneToMany
映射的@JoinColumn
批注中,同时添加两者 updatable=false
和insertable=false
,然后将级联类型指定为PERSIST而不是ALL。
@OneToMany(cascade = CascadeType.PERSIST)
@JoinColumn(name = "<ReadOnlyTableName>", updatable = false, insertable = false)