Je souhaite mapper un champ générique dans une superclasse avec Hibernate.Mise en correspondance hibernate et générique
Ma classe maternelle est:
@Entity
@Table(name = "ParameterValue")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "parameterType", discriminatorType = DiscriminatorType.STRING)
public abstract class ParameterValue<C>
{
private C value;
/* HELP NEEDED HERE */
public C getValue()
{
return value;
}
public void setValue(C value)
{
this.value = value;
}
}
Une sous-classe:
@Entity
@DiscriminatorValue(value = "integer")
@AttributeOverride(name = "value", column = @Column(name = "intValue"))
public class IntegerParameterValue extends ParameterValue<Integer>
{
}
Comme vous pouvez le voir, je passer outre le champ de valeur pour spécifier quelle colonne à utiliser dans la base de données. Ma table ParameterValue est composée de plusieurs colonnes, une pour chaque type.
CREATE TABLE `ParameterValue` (
`intValue` int(11) DEFAULT NULL,
`doubleValue` double DEFAULT NULL,
`stringValue` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Mais hibernate se plaint que:
ParameterValue.value has an unbound type and no explicit target entity. Resolve this Generic usage issue or set an explicit target attribute (eg @OneToMany(target=) or use an explicit @Type
Ok, mais ce qui est la bonne configuration pour getValue dans la superclasse? (J'ai mis un commentaire avec "HELP NEEDED HERE")
Cette méthode semble jeter la même exception en raison de la méthode abstraite getValue dans ParameterValue –
Assurez-vous d'utiliser l'accès sur le terrain plutôt que des biens d'accès (@access (AccessType.FIELD), ou ajoutez une annotation @Transient à la méthode getValue. –