# JPA / EclipseLink Klassen ohne ID mappen



## Cajus (22. März 2010)

Hallo zusammen, ich stehe gerade etwas (arg) auf dem Schlauch und vllt. könnt ihr mir ja etwas auf die Sprünge helfen oder mit zumindestens das ein oder andere Stichwort geben...

Mein Problem: Nachfolgende 3 Klassen sind gegeben und können (ausdrücklich) nicht erweitert / verändert werden (ich habe keinen Zugriff drauf)  sollen jedoch mit JPA / EclipseLink persistiert werden.


```
public class Block{

	private String name;

	private PairList pairList;

	public PairList getPairList() {
		return pairList;
	}
        ..........
}
```


```
public class PairList extends HashMap<String, Pair> {
	
	// Keine Attribute.
		
	protected void addElement(Pair newElement) {
		super.put(newElement.getName(), newElement);
	}

}
```


```
public class Pair{

	private String name;
	private String value;

	public Pair() {
		super();
	}

	public String getName() {
		return name;
	}
        ..........
}
```

Da ich sie nicht erweitern kann, fehlt mir die Option an den passenden Stellen eine ID einzufügen...

Der Name eines Blocks ist NICHT eindeutig. Eindeutig wird das Objekt "Block" nur durch Name + Liste (Einträge) der Paare..... auch hier fehlt mir eine ID!?

Irgendwelche Ideen oder Hints für mich?


Mit freundlichen Grüßen
Cajus


----------



## gorefest (22. März 2010)

Hi,

Du brauchst afaik in einem ORM generell eine ID oder einen zusammengesetzten Primärschlüssel.  Wenn es sich um bereits bestehende Datenbankstrukturen handelt, solltes Du den verantwortlichen Entwickler steinigen oder in die 2. Kreisliga schicken ;-)

Wenn Du die Tabellen selbst durch JPA bereitstellst, könntest Du die Klassen ableiten und mit einer ID versehen. Nur musst Du dann sicherstellen, dass neue Instanzen immer vom richtigen Typen sind (ist auch nur eine Krücke).

Grüße
gore


----------



## Cajus (23. März 2010)

Hallo, vielen Dank erstmal für die schnelle Antwort!

Da die Datenbanktabellen noch nicht angelegt sind werde ich mich wohl auf die "Krücke" stützen müssen.
Dachte es gibt vllt. irgend einen JPA oder EclipseLink eigenen Mechanismus der aus der AOP / Weaving Ecke (um IDs "dranzudichten") kommt.

Das Problem mit Klassen die nicht dafür ausgelegt sind (keine ID haben) müsste doch öfters vorkommen, oder?

Ist es möglich die Klasse PairList zu "übergehen" und direkt die ID des Pairs mit dem Block zu verknüpfen? Also die von HashMap abgeleitete Klasse quasi zu ignorieren?

Mit dem mappen von einer "standard" Map/HashMap komme ich klar - mit einer Ableitung jedoch nicht...


Mit freundlichen Grüßen
Cajus


----------



## Thomas Darimont (23. März 2010)

Hallo,

erstell doch eine Klasse die den "Block" als Embedded Component Mapping in einer anderen Holder-Entität hält. Diese kannst du dann mit einer Id Spalte austatten und speichern. Für den Block hast du dann keine eigene Tabelle sondern die Daten das Blocks werden in entsprechenden Spalten in der Tabelle für die Holder-Entität gespeichert.

Gruß Tom


----------

