JPA / Hibernate: Mapping einer Klasse auf eine Tabelle, Enum als Identifikation?

DarthShader

Erfahrenes Mitglied
Hallo,

ich habe hier zwei Klassen/Persistent Entitys, welche relativ einfach aufgebaut sind und exemplarisch so aussehen (es besteht eine 1:N bzw. N:1 Beziehung):

Java:
@Entity
@Table(name="persistentEntities")
public class MyPersistentEntity {

	@Id
	@GeneratedValue( strategy = GenerationType.IDENTITY )
	private Integer id;

	@OneToMany(mappedBy="entity", cascade=CascadeType.ALL)
	private List< MyOtherClass > otherClasses = new ArrayList< MyOtherClass >();
	
	// Getter/Setter Methoden
	// ....
}


Die Klasse MyOtherClass sieht (exemplarisch) so aus:


Java:
@Entity
@Table(name="otherClass")
public class MyOtherClass {

	public enum Type {
		UP, LEFT, RIGHT
	}

	@Id
	@GeneratedValue( strategy = GenerationType.IDENTITY )
	private Integer id;

	@ManyToOne(optional=true)
	@JoinColumn( name = "entity_id" )
	private MyPersistentEntity entity;
	
	@Enumerated(EnumType.STRING)
	private Type type;

	// Getter/Setter Methoden
	// ....
}


Man sieht, dass man von der 1 zur N Seite mit der Liste "otherClasses" navigieren kann, die wirkliche Beziehung jedoch durch das Attribut "entity" der Klasse MyOtherClass hergestellt wird.

So wie oben, funktioniert es auch und ergibt keine Probleme. Nun zu meiner eigentlichen Frage:

Was wäre, wenn ich wollte, dass die 1. Klasse "MyPersistentEntity" so aussieht:

Java:
@Entity
@Table(name="persistentEntities")
public class MyPersistentEntity {

	@Id
	@GeneratedValue( strategy = GenerationType.IDENTITY )
	private Integer id;

	private MyOtherClass upClass;
	private MyOtherClass leftClass;
	private MyOtherClass rightClass;
	
	// Getter/Setter Methoden
	// ....
}

Ich habe also die Liste durch 3 konkrete Member ausgetauscht. Ich weiß, dass ich maximal nur 3 "MyOtherClasses" in der Liste speichern würde und möchte dies nun in den 3 Membern tun. Als Identifikationsmerkmal soll der Enum in der 2. Klasse dienen, der dann in der Datenbanktabelle in einer Spalte "type" steht (siehe Zeile "private Type type;" der Klasse "MyOtherClass".


Die Frage ist, kann ich solch ein Mapping mit Hibernate konfigurieren bzw. ist Hibernate von Haus aus in der Lage, so eine 1:N Beziehung abzubilden, obwohl ich auf der 1-Seite keine Liste, sondern 3 konkrete Member verwende? Ich müsste Hibernate ja irgendwie sagen, dass der Enum "Type" ausschlaggebend für die Identifikation ist. Ich stelle mir z.B. vor, dass ich an den Member "upClass" (und entsprechendes an die anderen) schreibe:

Java:
@EnumID(MyOtherClass.TYPE.UP)
private MyOtherClass upClass;

So funktionierts natürlich nicht - aber geht das irgendwie anders?


Über Eure Hilfe würde ich mich sehr freuen


Vielen Dank!
 

Neue Beiträge

Zurück