Oracle
 sql >> Base de données >  >> RDS >> Oracle

JPA 2.0 Oracle DATE a une heure nulle

Pour ce type de problèmes, il est généralement utile de fournir la version du pilote JDBC et le dialecte que vous utilisez.

Quoi qu'il en soit, je crois comprendre que vous voulez réellement le mappage suivant (pour DATE et HEURE):

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

Et le problème que vous rencontrez est en quelque sorte lié à la folie introduite par Oracle avec la version 9.2, voir Que se passe-t-il avec DATE et TIMESTAMP ? (en bref, ils ont introduit un TIMESTAMP colonne et modifié le mappage de la DATE type SQL, lire la FAQ). Il existe plusieurs options pour le résoudre (je suppose bien sûr que vous utilisez un TemporalType.TIMESTAMP mappage):

Soit utiliser un TIMESTAMP type de colonne (Je ne veux pas dire TemporalType.TIMESTAMP ici, je veux vraiment dire le type de colonne du côté de la base de données). Mais si vous n'avez pas besoin d'une précision à la nanoseconde, ce n'est pas le meilleur choix.

Ou définissez le oracle.jdbc.V8Compatible=true mode de compatibilité, soit en tant que propriété système, soit en tant que propriété de connexion :

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

Oui, vous pouvez définir des propriétés de connexion arbitraires comme celle-ci. À partir de la documentation Hibernate :

Ou utilisez le pilote Oracle JDBC 11.1 (ils ont "résolu" le problème en annulant la modification). C'est IMO la solution idéale (le V8Compatible les choses sont obsolètes).

Problème connexe