Cartographie enum à une table avec hibernate annotations
J'ai une table FACE et une table DEAL_TYPE. Je voudrais une carte de ce code:
public class Deal {
DealType type;
}
public enum DealType {
BASE("Base"), EXTRA("Extra");
}
Le problème est que les données existent déjà dans la base de données. Et je vais avoir un moment difficile de cartographie les classes de la base de données.
La base de données ressemble à quelque chose comme ça:
TABLE DEAL {
Long id;
Long typeId;
}
TABLE DEAL_TYPE {
Long id;
String text;
}
Je sais que je pourrais utiliser un simple @OneToMany relation de face à face, mais je préfère utiliser un enum. Est-ce possible?
J'ai presque eu de travail à l'aide d'un EnumType.ORDINAL type. Mais malheureusement, mon Id dans ma transaction de type tableau ne sont pas séquentiels, et ne pas commencer à 1.
Des suggestions?
Vous devez vous connecter pour publier un commentaire.
Hibernate est une sorte de terrible à des Enums. C'est un étrange, à défaut, par ailleurs assez bon ORM. La "meilleure" façon de la contourner est de déclarer votre Enum personnalisé hibernate type. Heureusement, Hibernate a écrit un exemple de mise en œuvre de laquelle vous pouvez crèche textuellement dans votre application:
http://www.hibernate.org/265.html
Ils incluent même des instructions sur la façon de l'utiliser. C'est le modèle que j'utilise à chaque fois que je me retrouve avec la nécessité de persister enums.
J'ai créé une catégorie similaire comme celle proposée par hibernate seulement c'est configurable et il n'est pas nécessaire de créer un nouveau type uniquement pour cette persistance.
Peut être utilisé comme
J'ai ajouté une mise en œuvre de ParameterizedType à l'appui de l'passées en paramètre.
Vous pourrait annoter les enum avec
@Entity
et l'utilisation d'un custoumn tuplizer pour créer les instances de l'enum avecEnum.valueOf
La déclaration d'enum ressemble alors à:
Et la Tuplizer est:
Si vous souhaitez utiliser l'entité juste en lecture seule, vous pouvez utiliser
@Formula
et@Enumerated
. Essayez quelque chose comme:Bien que loin loin d'être idéale, ma solution à ce problème serait d'utiliser EnumStringType et un dénormalisée telle vue.