Java 反向@OneToMany不可更新
具有以下实体:Java 反向@OneToMany不可更新,java,hibernate,jpa,Java,Hibernate,Jpa,具有以下实体: @Entity class Transaction implements Serializable { @Id @GeneratedValue Long id @Column(nullable = false, updatable = false) Long trNumber @OneToMany(mappedBy = "transaction", cascade = CascadeType.ALL, orphanRemoval = true) Se
@Entity
class Transaction implements Serializable {
@Id @GeneratedValue
Long id
@Column(nullable = false, updatable = false)
Long trNumber
@OneToMany(mappedBy = "transaction", cascade = CascadeType.ALL, orphanRemoval = true)
Set<Entry> entries = new HashSet()
@Column(updatable = false, nullable = false)
@Temporal(TemporalType.TIMESTAMP)
Date creationDate
}
每次尝试更新事务时,我都可以使用JPA侦听器抛出异常,但我想在实体级别设置updateable=false行为,就像我对其他属性所做的那样。我想在JPA 2.0中使用注释是无法实现的。我在Apress的“Pro JPA 2”一书中读到,这种只读关系将在规范的未来版本中讨论 我有一个类似的问题,描述了。我还向专家组征求了任何意见(在写这篇文章时,没有给出答案) 级联一点也不改变,因为您不必为了改变其状态而“合并”对象。您只需获取移动到托管状态的
条目
(它还使其事务
移动到托管状态),因此每次更新最后都必须反映在数据库中
@JoinColumn(updateable=false)
似乎只是意味着不能将事务
实体更改为其他实体,而不是不能更改其状态
只要获取
条目
,就可以分离事务
实体。在这种情况下,对事务
所做的更改将被保存(它被管理),但对条目
所做的更改不会被保存(它被分离)。您只需要记住在最后刷新条目的状态,因为内存中的表示可能不等于数据库中的表示。将级联类型更改为限制性更强(不是全部)的类型是否有效?
@Entity
class Entry implements Serializable {
@Id @GeneratedValue
Long id
@ManyToOne(cascade= CascadeType.ALL)
@JoinColumn(updatable = false, nullable = false)
Transaction transaction
}