使用 datetime 而不是 datetime2 sqlserver hibernate
use datetime instead of datetime2 sqlserver hibernate
我将休眠配置为自动更新。我有一个 mssql-server 2012。Hibernate 在数据库中将我的 java.util.Date 对象创建为 datetime2。是否有可能强制休眠在数据库中创建日期时间?
我知道我可以在对象的字段上使用注释,但是太多了。所以我想配置休眠,以便每个 java.util.Date 自动成为数据库中的日期时间。
我首先想到的是定义一个新的 Hibernate Dialect
,它将 Java 数据类型映射到 datetime
,而不是默认的 datetime2
。
一个完整的class例子:
public class ModifiedSQLServerDialect extends SQLServer2008Dialect {
public ModifiedSQLServerDialect () {
super();
registerColumnType( Types.TIMESTAMP, "datetime" );
}
}
如果您查看 SQLServer2008Dialect
的源代码(假设是 Hibernate 4.3),您可能会看到 Types.TIMESTAMP
被映射到 "datetime2"
,我们正在有效地重新定义它,在我们的拥有 ModifiedSQLServerDialect
.
使用新方言
要使用我们刚刚定义的新方言,您需要在persistence.xml
文件中添加以下内容属性:
<property name="hibernate.dialect" value="com.example.ModifiedSQLServerDialect" />
我将休眠配置为自动更新。我有一个 mssql-server 2012。Hibernate 在数据库中将我的 java.util.Date 对象创建为 datetime2。是否有可能强制休眠在数据库中创建日期时间?
我知道我可以在对象的字段上使用注释,但是太多了。所以我想配置休眠,以便每个 java.util.Date 自动成为数据库中的日期时间。
我首先想到的是定义一个新的 Hibernate Dialect
,它将 Java 数据类型映射到 datetime
,而不是默认的 datetime2
。
一个完整的class例子:
public class ModifiedSQLServerDialect extends SQLServer2008Dialect {
public ModifiedSQLServerDialect () {
super();
registerColumnType( Types.TIMESTAMP, "datetime" );
}
}
如果您查看 SQLServer2008Dialect
的源代码(假设是 Hibernate 4.3),您可能会看到 Types.TIMESTAMP
被映射到 "datetime2"
,我们正在有效地重新定义它,在我们的拥有 ModifiedSQLServerDialect
.
使用新方言
要使用我们刚刚定义的新方言,您需要在persistence.xml
文件中添加以下内容属性:
<property name="hibernate.dialect" value="com.example.ModifiedSQLServerDialect" />