sql >> Databáze >  >> RDS >> Oracle

JPA 2.0 Oracle DATE má nulový čas

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ý).

Související problém



  1. laravel 5.2 - funkce vyhledávání

  2. MySQL jak spojit tabulky na dvou polích

  3. ukládání cizího klíče, nikoli z metody POST formuláře, ale pomocí dat formuláře, které již mám

  4. Přístup ke sloupci z tabulky aktualizace v poddotazu v mysql