Mam istniejącą bazę danych, z którą teraz łączę się przy użyciu hibernacji. Nie mogę zmienić danych w tym momencie i mieć wszystko działa niezależnie od pojedynczej kolumny.Mapowanie wyliczenia hibernacji przy użyciu annotaions
Mam kolumnę stanu, który ma wartości:
- nowy
- pośrednictwem poczty
- w
- z
a kolumna jest odwzorowywany w następujący sposób:
@Column(name = "STATUS", nullable = false, length = 50)
@Enumerated(EnumType.STRING)
private TeamMemberStatus status;
NAPRAWDĘ chciałbym (z powodów związanych z aplikacją), aby ta kolumna została zmapowana jako Java Enum (TeamMemberStatus), , ale ze względu na fakt, że "nowe" jest słowem kluczowym w języku Java, nie mogę tego mieć jako członka wyliczającego.
Jeśli mam kontury kontinuum NOWA, MAILED, IN i OUT hibernacja kończy się niepowodzeniem, ponieważ w EnumType robi Enum.valueOf().
Czy istnieje sposób, aby zmapować to do mojego Enum bez konieczności pisania złożonego UserType?
- dodaje zawartość
My Enum tak:
public enum TeamMemberStatus {
NEW, MAILED, IN, OUT
}
jest poprawnym enum Java, ale nie pasujące przypadek w bazie danych. Jeśli zmienię go tak, aby pasował do bazy danych, takiej jak:
public enum TeamMemberStatus {
new, mailed, in, out
}
Nie zostanie skompilowany, ponieważ "nowy" jest słowem zastrzeżonym w Javie.
Zakładam, że chcesz zmienić dane w bazie danych? Coś jak aktualizacja statusu TABLE status = upper (status). Nie mogę tego zrobić, ponieważ spowoduje to zerwanie istniejących aplikacji, które rozmawiają z tymi danymi, oczekując, że będzie to mała wartość. – stevemac
@stevemac Zaktualizowany –
To jest to, co opracowałem na końcu, w zasadzie wewnętrznie przechowaj ciąg i zmapuj go z/do wyliczenia po wywołaniu get/set. Będzie musiał zrobić to krótko, dopóki nie będę mógł zaktualizować wszystkich aplikacji, aby używać stałych wielkich liter. – stevemac