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