2016-04-05 15 views
1

Sagen wir, dass dies eine Klasse ist, die ein eindeutiges eingeschränktes Feld hat.Hibernate JPA Eindeutigkeit

@Entity 
public class Thing { 

    @Column(name = "name", unique = true) 
    private String name; 

    @ManyToOne 
    private Owner owner; 

} 

Beispiel funktioniert gut Things wenn neue mit eindeutigen Namen erstellt werden. Aber wenn verschiedene Besitzer Dinge mit dem gleichen Namen erstellen möchten, schlägt dieser Ansatz fehl.

Ist es möglich, eindeutige Einschränkung zu unterscheiden Aufzeichnungen Things in der Datenbank auf den Owners mit Hibernate/JPA-Funktionalitäten (ich kann nicht gefunden vorhanden) oder soll ich schreibe meine eigene Logik und wirft die unique von @Column Basis einzustellen.

Vielleicht könnte es mit Hibernate Validator getan werden? Lesen der docs Ich habe nicht viel über einzigartige Einschränkungen gefunden.

+1

Ich bin kein Experte, aber Hibernate in dieser Frage beschäftigen sie sich mit dem gleichen Problem suchen. Vielleicht hilft das http://stackoverflow.com/questions/2562746/jpa-entity-design-problem/2563009#2563009 – RubioRic

+0

@RubioRic: interessant, ich werde es untersuchen. –

Antwort

1
+1

Ich sehe nicht, wie Annotation vorgeschlagen anders funktionieren könnte. Es wird verwendet, um mehrere Einschränkungen auf Tabellen- und nicht auf Spaltenebene zu definieren. Ich brauche mehr Cross-Table-Lösung. –

+0

In Ihrem Fall möchten Sie nicht, dass der Name eindeutig ist, sondern dass die Kombination aus Name und Eigentümer eindeutig ist. So wie es jetzt aussieht, wird der Versuch, eine zweite Sache mit dem gleichen Namen wie jede existierende Sache hinzuzufügen, gegen Ihre Eindeutigkeitsbeschränkung auf Spaltenebene verstoßen. –

+0

Das macht mehr Sinn. So könnte ich 'Thing' mit etwas wie' @UniqueConstraint (columnNames = {"owner_id", "name"}) annotieren ''? –