W mojej aplikacji (Oracle DB [11G], Dane Spring, Java 8) Mapowałem moją podmiot z osobą id:

@Column(name = "MYID")
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "MY_SEQUENCE")
@SequenceGenerator(sequenceName = "MY_SEQUENCE", allocationSize = 1, name = "MY_SEQUENCE")
private Integer     id;

W kolumnie Oracle typ to liczba (38,0)

W przypadku niektórych danych, gdy próbuję flowbyd, zgłoszenie rzuca: błąd SQL: 17026, SQLState: Null - przelew numeryczny.

Próbowałem zmienić rodzaj mojego podmiotu Java, takiego jak długi, bigdecytalny i biginteger, ale otrzymuję przekonwertowanie całkowitego wyjątku z Hibernacji.

Nie mogę zmienić definicji tabeli w bazie danych.

Jak rozwiązać ten problem?

Dzięki

0
user801661 15 styczeń 2020, 21:09

1 odpowiedź

Najlepsza odpowiedź

Nigdy nie powinieneś naliczyć typ danych danych Integer Jeśli typ danych kolumny bazy danych jest zdefiniowany jako NUMBER(38,0), ponieważ ten format może przechowywać znacznie większe liczby niż pojedyncza precyzyjna {x2}}.

Bardziej bezpieczne jest użycie Long, który obejmuje podwójne precyzyjne liczby całkowite. Aby sprawdzić, czy Twoje dane są w zasięgu objętym Long Wykonaj to zapytanie (tabela zastępcza i nazwy kolumn)

select AGE from author_tab 
where not (-power(2,63) <= AGE and AGE <= power(2,63)-1)

Jeśli nie zwracają żadnych danych, jesteś na bezpiecznej stronie Long

Jako ostatni ośrodek używa {x0}} który Możesz przyciąć dokładnie do typu danych bazy danych

@Column(precision=38, scale=0)
BigInteger age
0
Marmite Bomber 19 styczeń 2020, 11:37