sql >> Database >  >> RDS >> Oracle

JPA 2.0 Oracle DATE heeft nultijd

Voor dit soort problemen helpt het meestal om de versie van het JDBC-stuurprogramma en het dialect dat u gebruikt op te geven.

Hoe dan ook, ik heb begrepen dat je eigenlijk de volgende toewijzing wilt (voor DATE en TIJD):

@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;

En het probleem waarmee u wordt geconfronteerd, is op de een of andere manier gerelateerd aan de waanzin die door Oracle is geïntroduceerd met versie 9.2, zie Wat is er aan de hand met DATE en TIMESTAMP? (kortom, ze introduceerden een TIMESTAMP kolom en veranderde de toewijzing van de DATE SQL-type, lees de FAQ). Er zijn verschillende opties om het op te lossen (ik ga er natuurlijk van uit dat je een TemporalType.TIMESTAMP gebruikt in kaart brengen):

Gebruik een TIMESTAMP kolomtype (Ik bedoel niet TemporalType.TIMESTAMP hier bedoel ik echt het kolomtype aan de DB-kant). Maar als je geen nanoseconde precisie nodig hebt, is dit niet de beste keuze.

Of stel de oracle.jdbc.V8Compatible=true . in compatibiliteitsmodus, hetzij als systeemeigenschap of als verbindingseigenschap:

<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>

Ja, u kunt op deze manier willekeurige verbindingseigenschappen instellen. Uit de Hibernate-documentatie:

Of gebruik het Oracle JDBC 11.1-stuurprogramma (ze hebben het probleem "opgelost" door de wijziging ongedaan te maken). Dit is IMO de ideale oplossing (de V8Compatible dingen zijn verouderd).

Gerelateerd probleem



  1. Fout bij verbinden met database:(gebruik klasse org.gjt.mm.mysql.Driver) De instructie (1) heeft geen open cursor

  2. Cursor verouderde dump

  3. Hoe een kolom bij te werken met aaneenschakeling van twee andere kolommen in dezelfde tabel

  4. Een web-app vanaf nul maken met Python Flask en MySQL:deel 4