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

}