2012-03-17 52 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); 
    } 

} 

該行插入歷史表中,但與空blob !!!

有沒有辦法處理這個使用eclipselink HistoryPolicy?

編輯:

以下是通過的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語句絲束用於更新選擇內容相同語句(該兩個語句是用於STAFF_ATTACHMENT表)

回答

1

似乎成爲EclipseLink對支持歷史的LOB定位器支持與Oracle平臺相結合的問題。

請記錄一個錯誤,但是如果您使用的是Oracle 11,那麼我認爲LOB現在可以在沒有定位器的情況下工作,因此不再需要解決方法。嘗試將平臺設置爲Oracle11,或者只使用不使用定位器的OraclePlatform。

+0

但我該如何設置平臺? – 2012-03-20 10:51:51

+0

我想通了:它工作正常:)非常感謝詹姆斯 – 2012-03-20 11:22:52