OpenJPA에서는 javax.persistence.Temporal 어노테이션이 있는 java.sql.Date, java.sql.Time
또는 java.sql.Timestamp 유형의 속성 필드를 지속하지만 EclipseLink에서는 예외 처리합니다.
일부 javax.persistence.Temporal 어노테이션과 java.sql.Date,
java.sql.Time 및 java.sql.Timestamp
속성 조합의 경우 변환기 코드를
추가하여 EclipseLink가 OpenJPA에서
작성한 테이블과 호환 가능하도록 해야 합니다.
이 규칙은 데이터베이스 및 엔티티 간에 데이터를 변환하는 데 변환기 클래스가 필요한 세 가지 어노테이션-속성 조합에 대해 스캔합니다.
java.sql.Date 속성의
javax.persistence.Temporal(TemporalType.TIMESTAMP) 어노테이션java.sql.Timestamp 속성의
javax.persistence.Temporal(TemporalType.DATE) 어노테이션java.sql.Timestamp 속성의
javax.persistence.Temporal(TemporalType.TIME) 어노테이션
변환이 필요하지 않고 Temporal 어노테이션을
제거할 수 있는 경우는
일부 java.sql 속성에 대해 임시 어노테이션 제거 규칙을
참조하십시오.
이 경우 규칙은 Temporal(TemporalType.TIMESTAMP) 어노테이션에 플래그를 지정합니다.
@javax.persistence.Temporal(TemporalType.TIMESTAMP) 개인용 java.sql.Date 날짜;
이 문제를 해결하려면 이 변환기가 필요한 모든 속성에 대해 사용할 수 있는 공통 변환기 유틸리티 클래스를 작성하십시오.
Converter 클래스를 작성하십시오.
import java.sql.Date; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.persistence.AttributeConverter; import javax.persistence.Converter; @Converter public class DateTimestampConverter implements AttributeConverter<Date, Timestamp> { @Override public Timestamp convertToDatabaseColumn(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); return new Timestamp(cal.getTime().getTime()); } @Override public Date convertToEntityAttribute(Timestamp timestamp) { return new Date(timestamp.getTime()); } }
java.sql.Date 속성의 Temporal(TemporalType.TIMESTAMP)
어노테이션을 converter 속성이 새 변환기 클래스로
설정된 Convert 어노테이션으로 대체하십시오.
다음 예제는 원래 Temporal(TemporalType.TIMESTAMP) 어노테이션을 표시합니다.
가져오기 javax.persistence.Convert; 가져오기 javax.persistence.Entity; 가져오기 javax.persistence.Id; 가져오기 javax.persistence.Table; 가져오기 javax.persistence.Temporal; 가져오기 javax.persistence.TemporalType; @Entity 공용 클래스 TemporalEntityOJ { @Id private int ID @Temporal(TemporalType.TIMESTAMP) 개인용 java.sql.Date sqlDateTIMESTAMP;}
다음 예제는 새 Convert 어노테이션을 표시합니다.
가져오기 javax.persistence.Convert; 가져오기 javax.persistence.Entity; 가져오기 javax.persistence.Id; 가져오기 javax.persistence.Table; 가져오기 javax.persistence.Temporal; 가져오기 javax.persistence.TemporalType; @Entity 공용 클래스 TemporalEntityOJ { @Id private int ID @Convert(converter=DateTimestampConverter.class) 개인용 java.sql.Date sqlDateTIMESTAMP;}
이 경우 규칙은 Temporal(TemporalType.DATE) 어노테이션에 플래그를 지정합니다.
@javax.persistence.Temporal(TemporalType.DATE) 개인용 java.sql.Timestamp 시간소인;
이 문제를 해결하려면 이 변환기가 필요한 모든 속성에 대해 사용할 수 있는 공통 변환기 유틸리티 클래스를 작성하십시오.
Converter 클래스를 작성하십시오.
임포트 java.sql.Date; 임포트 java.sql.Timestamp; 가져오기 javax.persistence.AttributeConverter; 가져오기 javax.persistence.Converter; @Converter 공용 클래스 TimestampDateAnnConverter 는 AttributeConverter< Timestamp, Date> {를 구현합니다. @Override public Date convertToDatabaseColumn(Timestamp ts) { return new Date (ts.getTime ()); } @Override public Timestamp convertToEntityAttribute(Date date) { return new Timestamp (date.getTime ()); }}
java.sql.Timestamp 속성의 Temporal(TemporalType.DATE)
어노테이션을 converter 속성이 새 변환기 클래스로 설정된
Convert 어노테이션으로 대체하십시오.
다음 예제는 원래 Temporal(TemporalType.DATE) 어노테이션을 표시합니다.
가져오기 javax.persistence.Entity; 가져오기 javax.persistence.Id; 가져오기 javax.persistence.Temporal; 가져오기 javax.persistence.TemporalType; @Entity 공용 클래스 TemporalEntityOJ { @Id private int ID @Temporal(TemporalType.DATE) private java.sql.Timestamp sqlTimestampDate;}
다음 예제는 새 Convert 어노테이션을 표시합니다.
가져오기 javax.persistence.Convert; 가져오기 javax.persistence.Entity; 가져오기 javax.persistence.Id; 가져오기 javax.persistence.Table; 가져오기 javax.persistence.Temporal; 가져오기 javax.persistence.TemporalType; @Entity 공용 클래스 TemporalEntityOJ { @Id private int ID @Convert(converter=TimestampDateAnnConverter.class) 개인용 java.sql.Timestamp sqlTimestampDate;}
이 경우 규칙은 Temporal(TemporalType.TIME) 어노테이션에 플래그를 지정합니다.
@javax.persistence.Temporal(TemporalType.TIME) private java.sql.Timestamp 시간소인;
이 문제를 해결하려면 이 변환기가 필요한 모든 속성에 대해 사용할 수 있는 공통 변환기 유틸리티 클래스를 작성하십시오.
Converter
클래스를 작성하십시오.
임포트 java.sql.Time; 임포트 java.sql.Timestamp; 가져오기 javax.persistence.AttributeConverter; 가져오기 javax.persistence.Converter; @Converter 공용 클래스 TimestampTimeAnnConverter 는 AttributeConverter< Timestamp, Time> {을 구현합니다. @Override public Time convertToDatabaseColumn(Timestamp ts) { return new Time (ts.getTime ()); } @Override public Timestamp convertToEntityAttribute(Time time) { 새 Timestamp (time.getTime ()); }}
java.sql.Timestamp 속성의 Temporal(TemporalType.TIME)
어노테이션을 converter 속성이 새 변환기 클래스로
설정된 Convert 어노테이션으로 대체하십시오.
다음 예제는 원래 Temporal(TemporalType.TIME) 어노테이션을 표시합니다.
가져오기 javax.persistence.Entity; 가져오기 javax.persistence.Id; 가져오기 javax.persistence.Temporal; 가져오기 javax.persistence.TemporalType; @Entity 공용 클래스 TemporalEntityOJ { @Id private int ID @Temporal(TemporalType.TIME) private java.sql.Timestamp sqlTimestampTime;}
다음 예제는 새 Convert 어노테이션을 표시합니다.
가져오기 javax.persistence.Convert; 가져오기 javax.persistence.Entity; 가져오기 javax.persistence.Id; 가져오기 javax.persistence.Table; 가져오기 javax.persistence.Temporal; 가져오기 javax.persistence.TemporalType; @Entity 공용 클래스 TemporalEntityOJ { @Id private int ID @Convert(converter=TimestampTimeAnnConverter.class) 개인용 java.sql.Timestamp sqlTimestampTime;}
이 문제 및 기타 OpenJPA에서 EclipseLink로의 마이그레이션 문제에 대한 정보는 OpenJPA에서 EclipseLink JPA로 마이그레이션: 맵핑 안내서를 참조하십시오.