2008-09-18 17 views
8

Chcę utworzyć encję, która ma wygenerowany automatycznie klucz podstawowy, ale także unikalny złożony klucz złożony z dwóch innych pól. Jak mam to zrobić w WZP?
Chcę to zrobić, ponieważ klucz podstawowy powinien być użyty jako klucz obcy w innej tabeli i sprawienie, że składanka nie będzie dobra.Klucz złożony w JPA

W poniższym ujęciu potrzebuję polecenia i modelu, aby były unikatowe. pk jest oczywiście kluczem podstawowym.

@Entity 
@Table(name = "dm_action_plan") 
public class ActionPlan { 
    @Id 
    private int pk; 
    @Column(name = "command", nullable = false) 
    private String command; 
    @Column(name = "model", nullable = false) 
    String model; 
} 
+0

Jaki jest problem z wykorzystaniem klucza związek jako klucz obcy? –

Odpowiedz

18

Można użyć @UniqueConstraint coś takiego:

@Entity 
@Table(name = "dm_action_plan", 
     uniqueConstraints={ @UniqueConstraint(columnNames= "command","model") }) 
public class ActionPlan { 
    @Id 
    private int pk; 

    @Column(name = "command", nullable = false) 
    private String command; 

    @Column(name = "model", nullable = false) 
    String model; 
} 

To pozwoli na wdrożenie WZP do generowania DDL dla UNIQUE.

+0

Poprawna forma jest następująca: @Table (name = "dm_action_plan") @UniqueConstraint (columnNames = {"command", "model"}) – homaxto

+0

homaxto: Zgodnie ze specyfikacją EJB3.0 Michel nadał właściwą formę. – Nicolas

0

Zastosowanie @GeneratedValue, aby wskazać, że klucz zostanie wygenerowany i @UniqueConstraint wyrazić jedyność

@Entity 
@Table(name = "dm_action_plan" 
     uniqueConstraint = @UniqueConstraint({"command", "model"}) 
) 
public class ActionPlan { 
    @Id 
    @GeneratedValue 
    private int pk; 
    @Column(name = "command", nullable = false) 
    private String command; 
    @Column(name = "model", nullable = false) 
    String model; 
} 
+0

Nie utworzy wiązania złożonego. Tworzy dwa ograniczenia, z których każdy dla każdej nazwy kolumny jest przypisany w @UniqueConstraint. – emanuelcds

+0

Następnie implementacja JPA jest błędna. Specyfikacja JPA2, §11.1.49 columnNames to "Tablica nazw kolumn składających się na ograniczenie ** ** (ograniczenie, a nie ograniczenia). – Nicolas

Powiązane problemy