与JPA OneToMany映射的只读关联

时间:2011-02-06 09:39:49

标签: java spring hibernate jpa orm

我有一个与另一个实体相关联的交易实体,在这种情况下不应更新相关联的实体。

EG。案例* - >用户

如果案例由用户拥有,则用户可以拥有许多相关案例。

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

我还尝试将User实体的Trasactional注释标记为readonly,并使得获取方法Transient。但是,如果用户的状态发生变化,这似乎不会停止更新。

请帮我说明一种向用户声明“只读”关联的方法。

2 个答案:

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

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