Можно ли сохранить нулевое значение перечисляемого атрибута в базе данных?

Я пытаюсь сохранить нулевое значение перечисляемого атрибута объекта в базе данных Java для Oracle с использованием JPA TopLink. Код выполняется без исключений и предупреждений, но объект не сохраняется в базе данных.

Сущность определяется следующим образом:

@Entity
public class LetterDoc {
   ...
    @Column(name = "delivery_type", columnDefinition = "VARCHAR2(20)", nullable = true)
    @Enumerated(EnumType.STRING)
    private DocDeliveryTypeEnum deliveryType;
   ...
}

Класс Enum DocDeliveryTypeEnum имеет только обязательные значения.

public enum DocDeliveryTypeEnum {
    NORMAL,
    RECOMMENDED,
    ACKNOWLEDGEMENT
}  

В моей ситуации у меня есть экземпляры сущностей, где deliveryType имеет смысл и требуется. Однако в некоторых случаях deliveryType не имеет значения и я хочу оставить его null . Я не хочу устанавливать значение по умолчанию, так как для этого случая нет подходящего значения.

Экземпляр объекта имеет значение null, но когда я пытаюсь сохранить и сбросить экземпляр в базе данных, он просто не сохраняется, хотя столбец определен как VARCHAR2 (20 )с включенным значением NULL.

Ситуация примерно такая:

LetterDoc let = new LetterDoc();
// settery ostatnich atributu
let.setDeliveryType(null);
try {
    emptyDocDAO.persist(let);
    emptyDocDAO.flush();
} catch (Exception e) {
    // no exception is really catched :(
    log.error(e);
}
// here I have the id of the entity

На самом деле при сохранении не возникает никаких исключений, просто объект не сохраняется. Когда я пытаюсь получить объект позже в другом потоке по идентификатору, он завершается с ошибкой NoResultException.

Есть ли шанс заставить эту работу работать, или мне действительно нужно установить значение для всех перечисленных атрибутов перед сохранением? Мне действительно нужно создать значение по умолчанию в классе Enum?

Я решил свою проблему, установив значение по умолчанию, которое не имеет особого смысла в конкретной ситуации. Однако мне интересно, есть ли другой вариант.

Большое спасибо за ваш опыт и совет.

6
задан Sharg 12 July 2012 в 13:26
поделиться