【发布时间】:2015-07-14 07:12:18
【问题描述】:
我有两个表,分别名为 SL_DOCUMENT 和 SL_PROPOSE。 SL_DOCUMENT 有自己的 ID (ID_DOCUMENT) 和 SL_PROPOSE (ID_PROPOSE) 的外键。 SL_PROPOSE ID 列是 ID_PROPOSE。特殊之处在于SL_PROPOSE ID 值实际上是SL_DOCUMENT.ID_DOCUMENT 值。即,插入新的SL_DOCUMENT 后,应插入相关的SL_PROPOSE,并以SL_DOCUMENT.ID_DOCUMENT 作为ID,稍后应在SL_DOCUMENT.ID_PROPOSE 列中使用相同的值。
我的 JPA 映射如下:
@Entity
@Table(name = "SL_DOCUMENT")
public class DocumentORM {
@Id
@Column(name = "ID_DOCUMENT")
@SequenceGenerator(name = "SEQ_SL_DOCUMENT", sequenceName = "SEQ_SL_DOCUMENT")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_SL_DOCUMENT")
private Long id;
@OneToOne(mappedBy = "document", cascade = { CascadeType.PERSIST })
// @JoinColumn(name = "ID_PROPOSE", updatable = false)
private ProposeORM propose;
// ...
}
@Entity
@Table(name = "SL_PROPOSE")
public class ProposeORM {
@Id
@Column(name = "ID_PROPOSE")
private Long id;
@MapsId
@OneToOne
@JoinColumn(name="ID_PROPOSE")
private DocumentORM document;
// ...
public ProposeORM(DocumentORM document) {
super();
this.document = document;
this.document.setPropositura(this);
}
}
创建 DocumentORM 和 ProposeORM 的新实例:
DocumentORM document = new DocumentORM();
ProposeORM propose = new ProposeORM(document);
最后用 ProposeORM 插入新文档:
this.documentoDAO.insert(document);
当我真正插入文档时,根据上面的 sn-ps,我在控制台(Websphere 8.5)中看到SL_DOCUMENT、SL_PROPOSE 的 INSERT 命令运行正常。但是,当我看到表格时,SL_DOCUMENT.ID_PROPOSE 列仍然是NULL。即使我取消注释 DocumentORM.propose 上的 @JoinColumn 注释,SL_DOCUMENT.ID_PROPOSE 列仍然没有被填充。
如果SL_DOCUMENT 有一个鉴别器列并且ProposeORM 是一个DocumentORM 子类,使用JOINED InheritanceType(还有其他表与SL_DOCUMENT 具有相同的关系),则理想情况是。但是,这些是旧表,无法更改。
那么,填充SL_DOCUMENT.ID_PROPOSE 的替代方法是什么?我正在考虑的一种解决方法是使用本机 SQL 填充此列。你有更好的想法吗?
谢谢,
拉斐尔·阿方索
【问题讨论】: