2015-05-04 105 views
2

我有一個存儲過程,它返回一個數據庫中的數據類型爲Datetime2的列和Java文件中的Date。當我試圖從數據庫獲取時間時調用getTime()。它返回19994321211毫秒,相當於2015年5月4日星期一00:00:00 IST 2015.理想情況下,它應該返回毫秒數的2015-05-04 15:21:52,因爲這是數據庫在直接執行過程時顯示的時間。休眠MSSQL datetime2映射

由於我是Hibernate的新手,我無法理解這個問題是否與hibernate映射或其他我錯過的東西有關。

<hibernate-mapping> 
    <sql-query name="getMLC"> 
      <return-scalar column="mlcid" type="int" /> 
      <return-scalar column="completionTime" type="date" /> 
      { call lsc.MLC_Get(:ABC, :XYZ, :ErrorCode)} 
    </sql-query> 
</hibernate-mapping> 

class Mlc implements java.io.Serializable { 

    private Integer mlcid; 
    private Date completionTime; 
    // getter and setter 
} 

回答

2

嘗試註冊一個新的驅動程序是這樣的:

public class DateTime2SQLServerDialect extends SQLServer2008Dialect { 

    public DateTime2SQLServerDialect() { 
     super(); 
     registerColumnType(Types.DATE, "datetime2"); 
    } 
} 

,然後用這個話來代替:

<property name="hibernate.dialect">my.package.DateTime2SQLServerDialect</property> 

也可以嘗試改變這一點:

<return-scalar column="completionTime" type="date" /> 

本:

<return-scalar column="completionTime" type="timestamp" /> 
+0

我創建的類如由你和hibernate.cfg.xml中,取代舊代碼新的如下,但仍然無法正常工作。如果需要進行其他更改,請提供幫助。 <! - 屬性名= 「hibernate.dialect」> \t \t org.hibernate.dialect.SQLServerDialect並 \t \t <屬性名= 「hibernate.dialect」> my.package.DateTime2SQLServerDialect – jasminum

+0

檢查我的更新答案 –

0
I am able to solve above scenario by changing datatype as below,driver registrayion is not required: 
<hibernate-mapping> 
    <sql-query name="getMLC"> 
      <return-scalar column="mlcid" type="int" /> 
      <return-scalar column="completionTime" type="timestamp" /> 
      { call lsc.MLC_Get(:ABC, :XYZ, :ErrorCode)} 
    </sql-query> 
</hibernate-mapping> 

class Mlc implements java.io.Serializable { 

    private Integer mlcid; 
    private TimeStamp completionTime; 
    // getter and setter 
} 
1

如果您使用的實體您可以向指定的列類型:

@Column(columnDefinition="datetime2") 
private Date completionTime;