Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

JPA 2.0 Oracle DATE tem hora nula


Para esse tipo de problema, geralmente ajuda fornecer a versão do driver JDBC e o dialeto que você está usando.

De qualquer forma, meu entendimento é que você realmente deseja o seguinte mapeamento (para DATE e TEMPO):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;

E o problema que você está enfrentando está de alguma forma relacionado à loucura introduzida pela Oracle com a versão 9.2, veja O que está acontecendo com DATE e TIMESTAMP? (em resumo, eles introduziram um TIMESTAMP coluna e alterou o mapeamento do DATE tipo SQL, leia o FAQ). Existem várias opções para resolvê-lo (é claro que estou assumindo que você está usando um TemporalType.TIMESTAMP mapeamento):

Ou use um TIMESTAMP tipo de coluna (Não me refiro a TemporalType.TIMESTAMP aqui, eu realmente quero dizer o tipo de coluna no lado do banco de dados). Mas se você não precisa de precisão de nanossegundos, essa não é a melhor escolha.

Ou defina o oracle.jdbc.V8Compatible=true modo de compatibilidade, seja como propriedade do sistema ou como propriedade de conexão:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>

Sim, você pode definir propriedades de conexão arbitrárias como esta. Da documentação do Hibernate:

Ou use o driver Oracle JDBC 11.1 (eles "corrigiram" o problema revertendo a alteração). Esta é a solução ideal da IMO (o V8Compatible coisas estão obsoletas).

Problema relacionado