2012-03-17 8 views
0

私はeclipselink JPAでアプリケーションを作成しています。履歴データを作成するためにHistoryPlicyを使用しています。すべての問題はうまくいきますが、BLOBデータを履歴テーブルにコピーする際の問題に直面しています。eclipselink historypolicy 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); 
    } 

} 

行は履歴テーブルに挿入されますが、空白はありません。

eclipselink HistoryPolicyを使用してこれを処理する方法はありますか?

EDIT:以下

は、更新のために選択したコンテンツに対して同一のステートメントは(二つの文がSTAFF_ATTACHMENTテーブルのためのものである)トウは

答えて

1

がように見えるのEclipseLink

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] 

音符によって生成されるSQL文でありますOracleLinkのLOBロケータ・サポートを組み合わせた履歴のEclipseLinkのサポートに関する問題です。

バグを記録してください。ただし、Oracle 11を使用している場合、LOBはロケータなしで動作すると考えられますので、回避策は必要ありません。プラットフォームをOracle11に設定するか、ロケータを使用しないOraclePlatformを使用してみてください。

+0

プラットフォームはどのように設定できますか? –

+0

私はそれを理解しました: