2015-05-17 26 views

cevap

12

Diyelim ki bir @ManyToOne dernek hedef tablo yabancı anahtarı tanımlayacak bir varlık B

@JoinColumn ot olan bir varlık A (örneğin B_ID) hedef Varlık tablosunu (örn B) kullanırken var diyelim.

@Entity 
public class A { 

    private Long id; 

    @ManyToOne 
    @JoinColumn(name="B_ID") 
    private B b; 

} 

@JoinTableA ve B arasındaki ilişkiyi tutmak için ayrı bir tablo kullanacaktır. ayrı bir tablo var çünkü

@Entity 
public class A { 

    private Long id; 

    @ManyToOne 
    @JoinTable(
     name = "A_B", 
     joinColumns = @JoinColumn(name = "B_ID"), 
     inverseJoinColumns = @JoinColumn(name = "A_ID") 
    ) 
    private B b; 

} 

bu kez de A de B, herhangi bir yabancı anahtar içeren (örneğin A_B) A ve B arasındaki ilişkiyi tutmak için.

+0

Böylece bir JoinTable N-N ilişkisidir? – julestruong

+0

Veritabanı terminolojisinde, çoktan çoğa bir ilişki var. Bu durumda, bir FK bir birleştirme tablosuyla bire-çok ilişkilendirmeye dönüştürmek için benzersiz bir kısıtlamaya sahip olacaktır. –

3

@JoTablo, her tablonun kimliğini ayrı bir tabloya kaydeder; @JoinColumn ise yeni bir sütunda başka bir tablonun kimliğini depolar.

@JoinTablo: Bu varsayılan türdür. Daha normalize edilmiş bir veritabanına ihtiyacınız olduğunda bunu kullanın. yani. fazlalığı azaltmak için.

@JoinColumn: Daha fazla performans için ekstra tabloya ihtiyaç duymadığından bunu kullanın.

İlgili konular