我有一个奇怪的问题,其中JPA映射无法转换为时间戳,但是它使用的值似乎是整行,而不仅仅是一个变量。
错误是:
java.sql.SQLException: Value '1988├╗ ├╗├╗├╗├╗├╗├╗0
07 1234567 wk├╗0├╗├╗├╗├╗├╗ ' can not be represented as java.sql.Timestamp
其中的值似乎是整行,大多数坏字符为空。调试日志记录目前没有给我太多帮助,我不确定这是我的映射类错误,排序规则问题还是其他错误。
MySQL工作台从表中正确读取所有信息。从命令运行mysql可以正确输出所有数据。都不在任何地方显示任何特殊字符。
我的映射类的简化版本是:
@Entity
@Audited
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
public class PersonSundry {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name="person_id", unique=true)
private Person person;
@ManyToOne(fetch=FetchType.EAGER)
private Lookup1 lookup1;
@ManyToOne(fetch=FetchType.EAGER)
private Lookup2 lookup2;
@Lob
private String backgroundInfo;
private LocalDate dateOfSomething1;
private LocalDate dateOfSomething2;
private LocalDate dateOfSomething3;
// getters and setters
}
有人遇到过吗?还有其他想法吗?
编辑:根本原因竟然是从00-00-0000到时间戳的一般失败转换,但是我要开放问题以查看是否有人知道在哪里给出了奇怪的错误消息而不是确切的错误消息。 。
最佳答案
您正在使用MYSQL吗?
请尝试使用这种类型的连接字符串。
jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=convertToNull
具有全零组成部分的日期时间(0000-00-00 ...)-这些值不能在Java中可靠地表示。从ResultSet中读取时,Connector / J 3.0.x始终将它们转换为NULL。
默认情况下,遇到这些值时,Connector / J 3.1会引发异常,因为根据JDBC和SQL标准,这是最正确的行为。可以使用zeroDateTimeBehavior配置属性来修改此行为。允许的值为:
异常(默认值),该异常将抛出SQLState为S1009的SQLException。
convertToNull,它返回NULL而不是日期。
四舍五入,将日期四舍五入为最接近的最近值0001-01-01。