CLOB не сохраняется в ORACLE (с JPA, eclipselink)

Я работаю над проектом, в котором у меня есть класс с этим атрибутом:

@Column(name="XMLDATA", columnDefinition="CLOB NOT NULL") @Lob @Basic(fetch=FetchType.LAZY)
@Getter @Setter private String _xmlData;

В базе данных тип столбца для этого атрибута — CLOB.

Я запускаю приложение на weblogic 11gR1 (10.3.5), используя базу данных Oracle (11gR2), JPA и eclipselink в качестве поставщика JPA. У меня проблема в том, что каждый раз, когда я сохраняю реестр в базе данных, clob - единственное поле, которое не сохраняется.

Но если не ставить аннотацию @lob, то работает нормально.

В журналах я вижу, что сначала он использует предложение «вставить» для вставки всех данных, кроме clob, а затем использует предложение «выбрать для обновления» для вставки данных clob, я не знаю, если это может быть частью проблемы.

Спасибо.


person JSP749    schedule 13.03.2014    source источник


Ответы (2)


Я много искал этот ответ, пока не понял, что если вы используете EclipseLink, по крайней мере, версии 2.5.2, вам не нужно использовать "@Column(name="XMLDATA", columnDefinition="CLOB NOT NULL ") @Lob @Basic(fetch=FetchType.LAZY)". Просто сделайте это:

@Column(name = "XML_DATA")
private String _xmlData;

EclipseLink будет знать, как обращаться со столбцом CLOB.

person tinocoam    schedule 08.12.2014

Для правильного управления большими двоичными объектами (JPA + Oracle) необходимо указать следующие свойства eclipselink:

имя свойства = "eclipselink.target-database" значение = "org.eclipse.persistence.platform.database.oracle.Oracle11Platform"

Кажется, что JPA иногда не может определить правильную версию платформы Oracle Database.

person Azimuts    schedule 13.03.2014