【发布时间】:2015-12-15 16:46:06
【问题描述】:
我在使用 JPA 的 TemporalType.Date 时遇到问题。在应用程序中选择值时,它似乎也保存了时间值并从数据库中选择它。这特别是在 Oracle DB 中
我使用的是 Hibernate 版本 4.2.20.Final-redhat-1。 Oracle 版本为 11.2.0.3.0 JBoss 版本 6.4.3.GA 包括的模块:jboss-as-jpa-hibernate4-7.5.3.Final-redhat-2 和 jboss-as-jpa-hibernate3-7.5.3.Final-redhat-2 Oracle 驱动程序:12.1.0.2.0
数据库配置:
使用的选择:
select * from nls_database_parameters;
select * from nls_instance_parameters;
select * from nls_session_parameters;
配置:
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET AL32UTF8
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 11.2.0.3.0
20 linhas selecionadas
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_SORT
NLS_DATE_LANGUAGE
NLS_DATE_FORMAT
NLS_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_ISO_CURRENCY
NLS_CALENDAR
NLS_TIME_FORMAT
NLS_TIMESTAMP_FORMAT
NLS_TIME_TZ_FORMAT
NLS_TIMESTAMP_TZ_FORMAT
NLS_DUAL_CURRENCY
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
17 linhas selecionadas
PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE BRAZILIAN PORTUGUESE
NLS_TERRITORY BRAZIL
NLS_CURRENCY R$
NLS_ISO_CURRENCY BRAZIL
NLS_NUMERIC_CHARACTERS ,.
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD/MM/RR
NLS_DATE_LANGUAGE BRAZILIAN PORTUGUESE
NLS_SORT WEST_EUROPEAN
NLS_TIME_FORMAT HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMAT DD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY Cr$
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
在 MySQL 和 SQLServer 中运行良好,在 MySQL 中为 5.5/5.6,在 SQLServer 中为 2008/2012/2014。
拜托,我能得到的所有帮助都是宝贵的=D
谢谢。
【问题讨论】:
-
表中列的类型是什么?您要保存什么日期,您在数据库中看到什么日期,以及如何保存?
-
嗨,它保存为列类型 DATE,Hibernate 正在创建这样的表。我将日期保存为一个对象 java.util.Date,并在实体中使用 TemporalType.DATE 进行注释,并将其保存在 Hibernate 中。我通过更改会话属性以向我显示这些值并从表中选择它并在应用程序上调试它来查看 DB 中的 DATE 和 TIME。
-
DATE 类型存储日期,从年到秒。见docs.oracle.com/cd/B28359_01/server.111/b28318/…。如果您愿意,可以使用格式化函数将日期仅视为年月。
-
但是使用hibernate创建DB时属性中注解的TemporalType.DATE不应该控制吗?
-
Hibernate 无法创建新的 oracle 数据类型。它使用数据库提供的内容。
标签: oracle hibernate jpa jboss jboss7.x