Próbuję zapisać zerową wartość na wyliczone atrybutem podmiotu w Java do Oracle bazy danych przy użyciu WZP TopLink. Kod jest wykonywany bez wyjątku lub ostrzeżenia, ale jednostka nie jest przechowywana w bazie danych.Czy jest możliwe zapisanie wartości pustej wyliczonego atrybutu w bazie danych?
Jednostka jest zdefiniowana w następujący sposób:
@Entity
public class LetterDoc {
...
@Column(name = "delivery_type", columnDefinition = "VARCHAR2(20)", nullable = true)
@Enumerated(EnumType.STRING)
private DocDeliveryTypeEnum deliveryType;
...
}
enum class DocDeliveryTypeEnum nie tylko wymagane wartości.
public enum DocDeliveryTypeEnum {
NORMAL,
RECOMMENDED,
ACKNOWLEDGEMENT
}
W mojej sytuacji mam wystąpienia jednostek, w których występuje parametr deliveryType i jest wymagany. Jednak w niektórych przypadkach deliveryType to nieistotne i chcę go zostawić null. Nie chcę ustawiać wartości domyślnej, ponieważ nie ma odpowiedniej wartości dla tego przypadku.
Instancja jednostki ma wartość ustawioną na wartość null, ale gdy próbuję kontynuować i wyczyścić instancję w bazie danych, nie jest ona przechowywana, chociaż kolumna jest zdefiniowana jako VARCHAR2 (20) z włączoną wartością NULL.
Sytuacja jest mniej więcej tak:
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
Naprawdę nie jest wyjątek podczas utrzymującego, tylko jednostka nie jest przechowywana. Kiedy próbuję uzyskać encję później w innym wątku przez identyfikator, to kończy się niepowodzeniem z NoResultException.
Czy jest jakaś szansa na wykonanie tej pracy, czy naprawdę muszę ustawić wartość dla wszystkich wyliczonych atrybutów, zanim będzie trwała? Czy naprawdę muszę utworzyć domyślną wartość w klasie Enum?
Rozwiązałem mój problem, ustawiając domyślną wartość, która nie ma większego sensu w konkretnej sytuacji. Zastanawiam się jednak, czy jest jakaś inna opcja.
Bardzo dziękuję za Państwa radę i doświadczenie.
Powinna być w stanie zapisać wartość zerową w kolumnie. Pokaż kod, w którym próbujesz to zrobić, i pełny ślad stosu wyjątku, który otrzymujesz. –
spróbuj tego w swoim członku enum: columnDefinition = "char (20) default" NULL "" – shem
@JBNizet: Naprawdę nie mam żadnego wyjątku. Właśnie o to się zastanawiam :( – Sharg