Я пытаюсь сохранить нулевое значение перечисляемого атрибута объекта в базе данных 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?
Я решил свою проблему, установив значение по умолчанию, которое не имеет особого смысла в конкретной ситуации. Однако мне интересно, есть ли другой вариант.
Большое спасибо за ваш опыт и совет.