# OpenJPA Zeichenvorrat in DB & Fremdschlüssel ohne Entität



## Demli (15. Mrz 2018)

Guten Tag,

ich würde gerne OpenJPA in einem Projekt von mir einsetzen und bin dabei leider auf einige Hürden gestoßen, zu denen ich noch nichts im Web gefunden habe.
Um meine Fragen besser nachvollziehen zu können möchte ich an dieser Stelle noch erwähnen, dass ich mir gern das Feature zu Nutze machen würde, welches OpenJPA die Datenbanktabellen automatisch anlegen lässt.

Einige meiner Entitäten haben String-Attribute. Nun würde ich gern den Zeichenvorrat für diese Attribute genau festlegen, habe bisher aber keine Konfigurationsmöglichkeit gefunden die mir das ermöglicht. Da wollte ich nun fragen ob es denn überhaupt möglich ist und wenn ja wie?

Meine zweite Frage ist ob es möglich ist einen Fremdschlüssel in einer Entität zu definieren ohne das eine equivalente Entität existiert auf die verlinkt werden kann. Ich möchte einer Entität einen Eintrag aus einer Tabelle zuordnen die bereits existiert und über 70 Attribute hat, zu dieser würde also nur sehr ungern eine entsprechende Entitätsklasse erstellen. Mir ist klar das ich auch einfach ein Integer-Feld deklarieren könnte um ihn dann mit dem entsprechenden Schlüsselwert aus der Datenbank zu füllen, nur hätte ich gern, dass in der Datenbank trotzdem ein entsprechender Constraint angelegt wird, der dieses Attribut als Fremdschlüssel definiert. Ist das möglich?


----------



## mrBrown (15. Mrz 2018)

Demli hat gesagt.:


> Einige meiner Entitäten haben String-Attribute. Nun würde ich gern den Zeichenvorrat für diese Attribute genau festlegen, habe bisher aber keine Konfigurationsmöglichkeit gefunden die mir das ermöglicht. Da wollte ich nun fragen ob es denn überhaupt möglich ist und wenn ja wie?


Was ist für dich der "Zeichenvorrat"? Die Kodierung oder die Größe der Spalte?



Demli hat gesagt.:


> Meine zweite Frage ist ob es möglich ist einen Fremdschlüssel in einer Entität zu definieren ohne das eine equivalente Entität existiert auf die verlinkt werden kann. Ich möchte einer Entität einen Eintrag aus einer Tabelle zuordnen die bereits existiert und über 70 Attribute hat, zu dieser würde also nur sehr ungern eine entsprechende Entitätsklasse erstellen. Mir ist klar das ich auch einfach ein Integer-Feld deklarieren könnte um ihn dann mit dem entsprechenden Schlüsselwert aus der Datenbank zu füllen, nur hätte ich gern, dass in der Datenbank trotzdem ein entsprechender Constraint angelegt wird, der dieses Attribut als Fremdschlüssel definiert. Ist das möglich?


Afaik musst du nicht alle Felder in der Datenbank in einer Entity angeben, in deinem Fall dürfte die ID als einziges Feld der Entity reichen. Dann kannst du es ganz normal als *To* angeben.

Solltest du aber einmal vorher testen, ich weiß nicht wie gut das mit dem Erstellen des Schemas dann klappt...


----------



## Demli (15. Mrz 2018)

Danke schonmal für die schnelle Antwort.
Mit Zeichenvorrat meinte ich eigentlich die Größe der Spalte, in der Datenbank kann ich ja angeben wieviele Zeichen innerhalb eines Feldes abgelegt werden können, z.B. varchar(20).


----------



## mrBrown (15. Mrz 2018)

Demli hat gesagt.:


> Mit Zeichenvorrat meinte ich eigentlich die Größe der Spalte, in der Datenbank kann ich ja angeben wieviele Zeichen innerhalb eines Feldes abgelegt werden können, z.B. varchar(20).


Geht mit `@Column(length=20)`, default ist 255:
https://docs.oracle.com/javaee/7/api/javax/persistence/Column.html#length--


----------



## Demli (15. Mrz 2018)

Super, dankeschön. Hatte nur in der OpenJPA-Dokumentation nachgeschlagen, sry.


----------



## mrBrown (15. Mrz 2018)

Bei den Annotationen würde ich mich strikt an die JPA-Spezifikation halten und OpenJPA-spezifische Dinge möglichst vermeiden


----------

