JPA

2008-09-18 33 views
8

'deki bileşik anahtarlar Otomatik olarak oluşturulmuş bir birincil anahtara sahip bir varlık yapmak istiyorum, ancak iki başka alandan oluşan benzersiz bir bileşik anahtar. Bunu JPA'da nasıl yaparım?
Bunu yapmak istiyorum çünkü birincil anahtar, başka bir tabloda yabancı anahtar olarak kullanılmalı ve bileşiklerin iyi olmaması için.JPA

Aşağıdaki kod parçasında, benzersiz olması için komut ve modele ihtiyacım var. pk tabii ki birincil anahtardır.

@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; 
} 

Bu JPA uygulaması benzersiz kısıtlama için DDL oluşturmasını sağlar:

@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

yabancı anahtar olarak bir bileşik anahtar kullanarak sorunu ne ifade etmek olduğunu belirtmek için? –

cevap

18

Böyle @UniqueConstraint şey kullanın.

+0

Doğru biçim şunun gibidir: @Table (name = "dm_action_plan") @UniqueConstraint (columnNames = {"komut", "model"}) – homaxto

+0

homaxto: EJB3.0 belirtimine göre, Michel doğru formu verdi. – Nicolas

0

Kullanım @GeneratedValue anahtar oluşturulur ve @UniqueConstraint olmakadır

@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

Bir bileşik kısıtı oluşturmaz. @UniqueConstraint öğesinde not aldığınız her sütun adı için iki kısıtlama yaratacaktır. – emanuelcds

+0

Ardından JPA uygulamanız yanlış. JPA2 belirtimi, §11.1.49 columnNames " ** kısıtlamasını ** oluşturan sütun adlarının bir dizisidir" (kısıtlama değil, kısıtlar). – Nicolas