유형 필드에 javax.xml.datatype.Duration
인 속성 필드가 있습니다. 기본적으로 시간 범위 (예 : 4 시간 34 분)를 나타냅니다.JPA로 기간 유형을 매핑하는 방법
JPA는 잘못된 유형이므로 JPA에서 저에게 충격을주지 않습니다.
무엇이 좋은 해결책입니까? 내 자신의 Duration 클래스를 구현할 수 있지만 JPA에 데이터 유형을 "받아들이는"방법을 모르겠습니다.
유형 필드에 javax.xml.datatype.Duration
인 속성 필드가 있습니다. 기본적으로 시간 범위 (예 : 4 시간 34 분)를 나타냅니다.JPA로 기간 유형을 매핑하는 방법
JPA는 잘못된 유형이므로 JPA에서 저에게 충격을주지 않습니다.
무엇이 좋은 해결책입니까? 내 자신의 Duration 클래스를 구현할 수 있지만 JPA에 데이터 유형을 "받아들이는"방법을 모르겠습니다.
무엇이 좋은 해결책입니까? 내 자신의 Duration 클래스를 구현할 수 있지만 JPA에 데이터 유형을 "받아들이는"방법을 모르겠습니다.
JPA는 사용자 정의 유형을 지원하지 않으므로이 방법으로 이동하려면 공급자의 JPA 확장자를 사용해야합니다. 예를 들어, Hibernate는 @Type
으로 선언하는 custom value types를 정의 할 수있다. 분명히, 이것은 관심사일지도 모른 공급자 사이 휴대 가능을 손상 할 것이다. 그렇지 않다면, 당신은 그것이 가능하다는 것을 압니다.
표준 JPA의 경우 전통적인 접근 방식은 문제가있는 속성을 적용하고 액세스 할 때 변환을 수행하는 다른 getter/setter 쌍을 추가하는 것입니다.
public MyEntity implements Serializable {
private Long id;
private javax.xml.datatype.Duration duration;
@Id
@GeneratedValue
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Transient
public Duration getDuration() {
return this.duration;
}
public void setDuration(Duration duration) {
this.duration = duration;
}
public Long getDurationAsJpaCompatibleType() {
return MyXmlUtil.convertDurationToLong(this.duration);
}
public void setDurationAsJpaCompatibleType(Long duration) {
setDuration(MyXmlUtil.convertLongToDuration(duration));
}
}
Duration 클래스의 정확한 필드를 고유 한 사용자 정의 클래스로 미러링 할 수 있지만 과장 될 수 있습니다 ... 그런 종류의 기간 유연성/세분성이 필요 없다고 가정합니다.
원하는 필드를 선택하고 클래스에 추가하고 @Embeddable 주석으로 클래스를 표시 한 다음 적절한 JPA 주석을 필드에 추가합니다 (단순한 int로 가정).
기간을 저장할 엔티티에서 일반적으로 사용하는 필드 나 getter에 @Embedded 주석을 추가하십시오. 여기에서 @AttributeOverride를 사용하여 열 정의를 추가로 조정할 수 있습니다.
당신은 joda-time hibernate을 시도해 볼 수도 있습니다 : 나는 시간을 저장하는 Long
을 사용합니다. 지속될 수있는 available types을 참조하십시오. 그런 다음 다음과 같은 방법으로 joda Duration을 사용할 수
@Type(type="org.joda.time.contrib.hibernate.PersistentDuration")
private Duration startDateTime;
당신은 시간의 수업을 감싸거나 처음부터 새로 구현하는 건가요? – HDave
처음부터 직접 만드는 것이 가장 쉽습니다. javax.xml.datatype.Duration 클래스는 더 많은 필드를 가지고 있으며, DB 테이블의 컬럼으로 드러내 길 원할 것입니다. 그래서 필요한 시간 단위로 커스텀 Duration 객체를 생성하십시오. – Jeff