2017-12-18 1 views
0

JPA 매핑이 타임 스탬프로 변환 할 때 실패하는 이상한 문제가 있습니다. 그러나 사용하는 값이 하나의 변수가 아닌 전체 행으로 나타납니다.이상한 메시지에서 JPA 매핑이 실패했습니다

오류는 다음과 같습니다

값이 널 (null) 인 나쁜 문자의 대부분, 전체 행 것으로 보인다
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 
} 

은 사람이하기 전에이 건너 했습니까? 어떤 아이디어가 필요해?

EDIT : 근본 원인이 타임 스탬프에 00-00-0000이라는 일반적인 실패한 것으로 밝혀졌습니다. 그러나 누군가가 이상한 오류 메시지가 제공된 위치를 알고 있는지 확인하기 위해 질문을 열어 두겠습니다. 정확한 것.

+0

사용자가 일부 작업을 수행하고 SQL이 데이터베이스로 전송됩니다. 이 SQL은 JPA 제공자 로그에 인쇄됩니다. 왜 보지 않으시겠습니까? – DN1

+0

Hibernate에 Java 8 지원을 추가 했습니까? JPA 2.1은 Java 8 date time API를 즉시 지원하지 않기 때문에 –

+0

Java를 지속한다면 실패한 행을 찾는 방법을 코드에 표시 할 수 있습니까? 데이터베이스에서 LocalDate의 데이터 유형은 무엇입니까? – pirho

답변

0

MYSQL을 사용하고 있습니까? 이 연결 문자열을 사용해보십시오.

jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=convertToNull 

모두 0 인 구성 요소가있는 Datetimes (0000-00-00 ...) -이 값은 Java에서 안정적으로 나타낼 수 없습니다. Connector/J 3.0.x는 ResultSet에서 읽을 때 항상 NULL로 변환합니다.

JDBC/SQL 표준에 따라 가장 정확한 동작이므로 Connector/J 3.1은 이러한 값이 발생할 경우 기본적으로 예외를 throw합니다. 이 동작은 zeroDateTimeBehavior 구성 속성을 사용하여 수정할 수 있습니다. 허용되는 값은

예외 (기본값)이며 SQLState가 S1009 인 SQLException을 발생시킵니다.

convertToNull은 날짜 대신 NULL을 반환합니다.

round, 가장 가까운 가장 가까운 값인 0001-01-01로 날짜를 반올림합니다.

+0

이 핸들을 사용하면 MySQL이 암시 적으로 변환을 수행합니다. 내가 알고 싶은 것은 왜 오류 메시지가 올바르지 않은 이유입니다. –

+0

모두 0 인 구성 요소가있는 Datetimes (0000-00-00 ...) -이 값은 Java에서 안정적으로 나타낼 수 없습니다. Connector/J 3.0.x는 ResultSet에서 읽을 때 항상 NULL로 변환합니다. JDBC/SQL 표준에 따라 가장 정확한 동작이므로 Connector/J 3.1에서는 이러한 값이 발생할 때 기본적으로 예외를 throw합니다.이 동작은 zeroDateTimeBehavior 구성 속성을 사용하여 수정할 수 있습니다. – Sirsendu

관련 문제