【问题标题】:TemporalType.Date saving Time in OracleOracle 中的 TemporalType.Date 节省时间
【发布时间】: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


【解决方案1】:

看来这个话题有答案了:

http://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html

但是,如果数据库是 Oracle 11g,也会出现问题,只需要使用驱动程序 Oracle 12。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2016-01-18
    • 2018-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多