Hibernate JPA在SQLServer2008中将LocalDateTime列创建为datetime2
我的实体具有此属性Hibernate JPA在SQLServer2008中将LocalDateTime列创建为datetime2,hibernate,date,jpa,datetime2,Hibernate,Date,Jpa,Datetime2,我的实体具有此属性 @Convert(converter = LocalDateTimeAtributeConverter.class) @Column(name="dthr_ult_atualizacao") private LocalDateTime ultimaAtualizacao; 在服务器中,JPA将列创建为: dthr_ult_atualizacao (datetime2(7), null) 通过代码,我将以下值保存在此列中: 2016-05-09T15:20:00.35
@Convert(converter = LocalDateTimeAtributeConverter.class)
@Column(name="dthr_ult_atualizacao")
private LocalDateTime ultimaAtualizacao;
在服务器中,JPA将列创建为:
dthr_ult_atualizacao (datetime2(7), null)
通过代码,我将以下值保存在此列中:
2016-05-09T15:20:00.357
在数据库中执行Select direct时,值是正确的:
2016-05-09 15:20:00.3570000
但当我通过JPA恢复该值时,该值是错误的:
2016-05-07T15:20:00.357
请注意,两天后的日期是错误的
因此,如果我手动更改数据类型,一切都可以正常工作。怎么了
我的转换器:
import java.time.LocalDateTime;
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter
public class LocalDateTimeAtributeConverter implements AttributeConverter<LocalDateTime, java.sql.Timestamp> {
@Override
public java.sql.Timestamp convertToDatabaseColumn(LocalDateTime entityValue)
{
if (entityValue != null) {
return java.sql.Timestamp.valueOf(entityValue);
}
return null;
}
@Override
public LocalDateTime convertToEntityAttribute(java.sql.Timestamp databaseValue) {
if (databaseValue != null) {
return databaseValue.toLocalDateTime();
}
return null;
}
}
import java.time.LocalDateTime;
导入javax.persistence.AttributeConverter;
导入javax.persistence.Converter;
@转换器
公共类LocalDateTimeAtributeConverter实现AttributeConverter{
@凌驾
public java.sql.Timestamp convertToDatabaseColumn(LocalDateTime entityValue)
{
if(entityValue!=null){
返回java.sql.Timestamp.valueOf(entityValue);
}
返回null;
}
@凌驾
公共LocalDateTime convertToEntityAttribute(java.sql.Timestamp数据库值){
if(databaseValue!=null){
返回databaseValue.toLocalDateTime();
}
返回null;
}
}
我将Microsofr jdbc42与wildfly 9一起使用您使用的是旧的JDBC驱动器吗 使用Java7的SQL Server JDBC版本3存在一个问题: 您可以在此处获得新版本: 我做了一些测试,得到了以下结果: 日期-JDBC版本 2016-06-21 16:19:00.383-4.2.6420.100 2016-06-19 16:19:38.603-3.0.1301.101 测试代码:
public static void main(String[] args) throws Exception {
String url = "jdbc:sqlserver://localhost\\SQLEXPRESS;databasename=teste_date";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection connection = DriverManager.getConnection(url,"sa", "password");
Date time = Calendar.getInstance().getTime();
PreparedStatement psDel = connection.prepareStatement("delete from teste");
psDel.executeUpdate();
psDel.close();
PreparedStatement psInsert = connection.prepareStatement("insert into teste values (? , ?)");
psInsert.setInt(1, 1);
psInsert.setTimestamp(2, new Timestamp(time.getTime()));
psInsert.executeUpdate();
psInsert.close();
PreparedStatement ps = connection.prepareStatement("select * from teste");
ResultSet rs = ps.executeQuery();
String driverVersion = connection.getMetaData().getDriverVersion();
while (rs.next()) {
Timestamp date = rs.getTimestamp(2);
System.out.println(date + " - " + driverVersion);
}
rs.close();
ps.close();
connection.close();
}