Pro tento druh problémů obvykle pomůže poskytnout verzi ovladače JDBC a dialekt, který používáte.
Každopádně chápu, že ve skutečnosti chcete následující mapování (pro DATE a ČAS):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
A problém, se kterým se potýkáte, nějak souvisí se šílenstvím, které zavedl Oracle s verzí 9.2, viz Co se děje s DATE a TIMESTAMP?
(ve zkratce zavedli TIMESTAMP
a změnil mapování DATE
Typ SQL, přečtěte si FAQ). Existuje několik možností, jak to vyřešit (samozřejmě předpokládám, že používáte TemporalType.TIMESTAMP
mapování):
Buď použijte TIMESTAMP
typ sloupce (Nemyslím TemporalType.TIMESTAMP
zde mám skutečně na mysli typ sloupce na straně DB). Ale pokud nepotřebujete nanosekundovou přesnost, není to nejlepší volba.
Nebo nastavte oracle.jdbc.V8Compatible=true
režim kompatibility, buď jako vlastnost systému nebo jako vlastnost připojení:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
Ano, můžete takto nastavit libovolné vlastnosti připojení. Z dokumentace Hibernate:
Nebo použijte ovladač Oracle JDBC 11.1 (problém „vyřešili“ vrácením změny). Toto je IMO ideální řešení (V8Compatible
obsah je zastaralý).