Foreign Keys in Spring Data über Hibernate Annotationen setzen

In einem Projekt, an dem ich aktuell bei meinem Arbeitgeber mitarbeite, wird ein noch recht junges Framework eingesetzt, dass auf Java, Angular, SQL und Tomcat setzt. 

Mit diesem Framework werden aktuell Webanwendungen geschrieben. Ein Teil der letzten Wochen ist die Anbindung einer hausinternen Serviceschicht gewesen, die wiederum zwischengespeichert werden soll, damit die Latenz kleiner wird. 

Zwischengespeichert werden die Daten in einer relationalen Datenbank. Teil des Prozesses, im Moment, ist das Erstellen und Abgleichen eines DB-Schemas, jedes mal, wenn man eine Änderung an der Persistenz-Schicht vornimmt. Da per Default Spring die Foreign-Keys selbst benamst, und zwar nicht sehr gut (FK_9229AKRWNHJ982A beispielsweise), haben wir die Keys selbst benannt. 

Um beim Abgleich keinen Fehler zu machen, stellen wir bei Änderungen unser Spring-Projekt so ein, dass bestehende Tabellen alle gelöscht und dann wieder erstellt werden. Dadurch werden aber auch unsere selbst vergebenen Foreign-Key-Namen überschrieben. 

Ein kleiner Trick hilft, diesen Aufwand zu vermeiden. Mit Hilfe einer Hibernate-Annotation kann Foreign-Keys Namen gegeben werden. Im Fall einer OneToMany Beziehung, mit JoinColumn, sieht das ganze dann beispielsweise so aus.

@Entity
public class Vater 
{

   @OneToMany
   @JoinColumn(name = "vater_id", foreignKey = @ForeignKey(name = "FK_vater_kind"))
   Set<Kind> kinder;

[...]
}

So wird beim nächsten Erstellen der Tabelle für die Entität Vater der Foreignkey-name „FK_vater_kind“ vergeben. 

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.