【发布时间】:2012-03-17 22:17:56
【问题描述】:
我正在使用 eclipselink JPA 创建应用程序,我正在使用 HistoryPlicy 创建历史数据。一切正常,但我在将 blob 数据复制到历史表时遇到了问题。
@Entity
@Customizer(AttachmentHistoryPolicy.class)
@Table(name = "STAFF_ATTACHMENT", catalog = "", schema = "OIA")
public class Attachment implements Serializable {
@Id
private Long id;
@Basic(optional = false)
@NotNull
@Lob
@Column(name = "CONTENTS")
private byte[] contents;
// getters and setters
}
public class AttachmentHistoryPolicy implements DescriptorCustomizer {
@Override
public void customize(ClassDescriptor cd) throws Exception {
HistoryPolicy policy = new HistoryPolicy();
policy.addHistoryTableName("HIST_STAFF_ATTACHMENT");
policy.addStartFieldName("HIST_START_DATE");
policy.addEndFieldName("HIST_END_DATE");
policy.setShouldHandleWrites(true);
//policy.useDatabaseTime();
cd.setHistoryPolicy(policy);
}
}
该行已插入历史记录表中,但带有空 blob!!!
有没有办法使用 eclipselink HistoryPolicy 来处理这个问题?
编辑:
以下是eclipselink生成的sql语句
BEGIN INSERT INTO OIA.STAFF_ATTACHMENT (ID, CONTENT_TYPE, CONTENTS, FILE_NAME, FILE_SIZE, OWNER, STAFF_MEMBER) VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING CONTENTS INTO ?; END;
SELECT CONTENTS FROM OIA.STAFF_ATTACHMENT WHERE (ID = ?) FOR UPDATE
INSERT INTO HIST_STAFF_ATTACHMENT (ID, CONTENT_TYPE, CONTENTS, FILE_NAME, FILE_SIZE, OWNER, STAFF_MEMBER, HIST_START_DATE) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
SELECT CONTENTS FROM OIA.STAFF_ATTACHMENT WHERE (ID = ?) FOR UPDATE
bind => [1 parameter bound]
注意两个相同的语句选择更新内容(这两个语句用于 STAFF_ATTACHMENT 表)
【问题讨论】:
标签: jpa eclipselink