좋습니다.이 질문은 코드에서 가장 잘 설명됩니다. 내가 할 수있는 가장 간결한 예를 제시하려고 노력할 것이다.Generic이있는 Hibernate 구성 요소
Timestamped.java
@Embeddable
public class Timestamped<E> {
private E value;
private Date timestamp;
...
}
Foo.java
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="TYPE")
public class Foo {
@Embedded
@AttributeOverides({
@AttributeOverride(name="timestamp", [email protected]("VALUE_TS")),
@AttributeOverride(name="value", [email protected]("VALUE"))
})
private TimestampedValue<E> value;
...
}
Bar.java이
@Entity
@DiscriminatorValue("BAR")
public class Bar extends Foo<Double> { }
내가 필요로하는 f를 또는 Bar를 사용하여 value.value에 적합한 유형 변환기를 사용하고 Foo의 각 서브 클래스에 대해 다른 변환기를 사용하십시오. 이상적으로는이 코드를 보완하고 싶지만, 나는 Foo 추상화를 만들고 추가 주석을 사용하여 각 하위 클래스에 값 필드를 이동시킬 것입니다.
값 필드를 이동하면 구성 요소 필드의 유형을 어떻게 설정합니까? @Type에 상응하는 요소를 작성하는 것에 비해 일종의 컴포넌트 필드가 있습니까? –
구체적인 유형으로 선언해야합니다 (예 : 'private TimestampedValue'그리고'@ AttributeOverrides'를 사용하십시오. Hibernate는 generics를 다룰 수 없다. 그래서 당신이 유지/주석하는 모든 클래스들은 명시 적으로 타입 파라미터를 선언해야한다. 계층 구조가 큰 경우 사용자 지정 UserType을 작성하는 것이 더 나은 방법 일 수 있습니다. –
ChssPly76
나는 ChssPly76의 대답을 사용하는 것을 끝내었다. 그래서 foo는 이제 "TimestampedValue 값"필드를 갖습니다. –