2015-05-04 1 views
2

У меня есть хранимая процедура, которая возвращает столбец с типом данных как datetime2 в базе данных и Date в файле Java. Когда я пытаюсь вызвать getTime() на полученное время из базы данных. Он возвращает 19994321211 миллисекунды, что эквивалентно Mon May 04 00:00:00 IST 2015. В идеале он должен возвращать миллисекунды 2015-05-04 15:21:52, так как это время, указанное в базе данных, когда процедура выполняется напрямую.Hibernate MSSQL datetime2 mapping

Поскольку я новичок в 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

Try регистрации нового драйвера, как это:

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, заменить старый код с новый, как показано ниже, но все же он не работает. Пожалуйста, помогите, если требуются другие изменения. \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;