更新:我通过相反的方式“解决”了这个问题!我现在将实体引用字段设置为只读(insertable=false updatable=false),外键字段为读写。这意味着我在保存新实体时需要特别小心,但在查询时,实体属性会为我解析。
我在我的域模型中有一个双向的一对多关联,其中我使用 JPA 注释和 Hibernate 作为持久性提供程序。这几乎是您的沼泽标准父/子配置,不同之处在于我想将父的外键作为子的单独属性与对父实例的引用一起公开,如下所示:
@Entity
public class Child {
@Id @GeneratedValue
Long id;
@Column(name="parent_id", insertable=false, updatable=false)
private Long parentId;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="parent_id")
private Parent parent;
private long timestamp;
}
@Entity
public class Parent {
@Id @GeneratedValue
Long id;
@OrderBy("timestamp")
@OneToMany(mappedBy="parent", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
private List<Child> children;
}
这在大多数情况下都可以正常工作,但是在很多(遗留)情况下,我想在 parent_id 列中放置一个无效值,而不必先创建一个虚假的 Parent。
不幸的是,由于 ,Hibernate 不会保存分配给该parentId
字段的值insertable=false, updatable=false
,当同一列映射到多个属性时,它需要它。有什么好方法可以“在 Hibernate 的背后”并将值潜入该字段,而无需下拉到 JDBC 或实现拦截器?
谢谢!