история затмений - PullRequest
       2

история затмений

0 голосов
/ 18 марта 2012

Я создаю приложение с 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);
    }

}

строка вставлена ​​в таблицу истории, но с пустым блобом !!!

есть ли способ справиться с этим с помощью eclipselink HistoryPolicy?

РЕДАКТИРОВАТЬ:

Ниже приведены SQL-операторы, сгенерированные 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]

обратите внимание на два идентичных оператора для выбранного содержимого для обновления (два оператора для таблицы STAFF_ATTACHMENT)

1 Ответ

1 голос
/ 19 марта 2012

Кажется, проблема в поддержке истории EclipseLink в сочетании с поддержкой локатора больших объектов для платформ Oracle.

Пожалуйста, зарегистрируйте ошибку, но если вы используете Oracle 11, тогда я думаю, что LOB теперь работает без локатора, поэтому обходной путь больше не требуется. Попробуйте установить платформу на Oracle11 или просто использовать OraclePlatform, которая не использует локатор.

...