2015-02-24 2 views
3

Можно ли встраивать общее поле с помощью Hibernate?Как вставить общее поле, используя Hibernate?

Я пытался сделать это в следующем виде:

@Entity 
public class Element<T> { 

    @Embedded 
    private T value; 
... 

Но у меня есть:

org.hibernate.AnnotationException: 
Property value has an unbound type and no explicit target entity. 

Я знаю, что целевой тип value будет SpecificValue типа. Но как это указать?

ответ

2

Hibernate не может сохранять общие поля из-за Type Erasure.

Однако мне удалось найти простой обходной путь:

  1. Добавить @Access(AccessType.FIELD) аннотацию к классу.

  2. Добавить @Transient аннотация в поле, которое вы хотите сохранить.

  3. геттер и сеттер, который использует это поле.

  4. Добавить @Access(AccessType.PROPERTY) на газопоглотитель.

  5. Укажите тип поля встраиваемый, добавив в поле свойства @Embeddable.

Таким образом, вы сможете иметь встроенное свойство определенного типа.

Вот модифицированный код:

@Entity 
@Access(AccessType.FIELD) 
public class Element<T> { 

    @Transient 
    private T value; 

    @Access(AccessType.PROPERTY) 
    private SpecificValue getValue() { 
     return (SpecificValue) value; 
    } 

    private void setValue(SpecificValue v) { 
     this.value = (T) v; 
    } 

... 

@Embeddable 
public class ValueType { 

... 
Смежные вопросы