Nasıl göster Hazırda kompozit bir anahtar mı?
Bileşik anahtar için bir Java sınıfı oluşturmak için nasıl bir kod hazırda önemli bileşik ():
create table Time (
levelStation int(15) not null,
src varchar(100) not null,
dst varchar(100) not null,
distance int(15) not null,
price int(15) not null,
confPathID int(15) not null,
constraint ConfPath_fk foreign key(confPathID) references ConfPath(confPathID),
primary key (levelStation,ConfPathID)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CEVAP
Harita için bileşik anahtar, EmbeddedId
kullanabilirsinizyaIdClass
açıklamalar. Bu soru kesinlikle hakkında JPA değil biliyorum ama kuralları belirtimi tarafından tanımlanan de geçerlidir. İşte onlar::
2.1.4 Birincil Anahtarları ve Varlık Kimlik
...
Gerek bileşik bir birincil anahtar karşılık da bir tek sürekli alan ya da bir özellik bu tür alanlar kümesi ya da özellik olarak aşağıda açıklandığı. Birincil anahtar sınıfı bir temsil için tanımlanmış olmalıdır bileşik birincil anahtar. Kompozit birincil anahtarlar, genellikle ortaya çıkar mirasından eşleme zaman veritabanları veritabanı tuşuna birkaç oluşmaktadır sütunlar.* *10 ve 11* *açıklamalar için kullanılır belirtmek bileşik birincil anahtarlar.Bakın bölüm 9.1.14 ve 9.1.15.
...
Aşağıdaki kuralları uygulayın bileşik birincil anahtarlar:
- Birincil anahtar sınıfı ve kamu no-arg olmalı ortak olması gerekir kurucu.
- Özellik tabanlı erişim, birincil anahtar özellikleri kullanılırsa sınıf ortak veya korumalı olmalıdır.
- Birincil anahtar sınıfı
serializable
olmalıdır.- Birincil anahtar sınıfı
equals
hashCode
tanımlamak gerekir yöntemleri.Değer anlamı bu yöntem için eşitlik olmalı veritabanı ile tutarlı eşitlik veritabanı türleri olduğu için anahtar eşleştirilir.- Bileşik birincil anahtar ya da bir temsil eşlenmesi gerekir gömülebilir sınıf (bkz 9.1.14, “Embeddedİd Açıklama”) ya da olmalıdır temsil ve birden fazla eşleştirilmiş varlık alanlarını veya özelliklerini sınıf (bkz 9.1.15, “İdClass ”) Açıklama.
- Bileşik birincil anahtar sınıfı eğer birden fazla alan veya eşleştirilmiş varlık sınıfının özellikleri, birincil anahtar alanların adlarını veya birincil anahtar sınıfı özellikleri ve bu varlık sınıfının gerekir ülkelere ve onların türleri olmalıdır aynı.
IdClass
ile
Bileşik birincil anahtar sınıfı (statik iç bir sınıf olabilir) gibi görünebilir:
public class TimePK implements Serializable {
protected Integer levelStation;
protected Integer confPathID;
public TimePK() {}
public TimePK(Integer levelStation, Integer confPathID) {
this.levelStation = levelStation;
this.confPathID = confPathID;
}
// equals, hashCode
}
Ve varlık:
@Entity
@IdClass(TimePK.class)
class Time implements Serializable {
@Id
private Integer levelStation;
@Id
private Integer confPathID;
private String src;
private String dst;
private Integer distance;
private Integer price;
// getters, setters
}
IdClass
açıklama haritalar birden fazla tablo PK alanları.
EmbeddedId
ile
Bileşik birincil anahtar sınıfı (statik iç bir sınıf olabilir) gibi görünebilir:
@Embeddable
public class TimePK implements Serializable {
protected Integer levelStation;
protected Integer confPathID;
public TimePK() {}
public TimePK(Integer levelStation, Integer confPathID) {
this.levelStation = levelStation;
this.confPathID = confPathID;
}
// equals, hashCode
}
Ve varlık:
@Entity
class Time implements Serializable {
@EmbeddedId
private TimePK timePK;
private String src;
private String dst;
private Integer distance;
private Integer price;
//...
}
@EmbeddedId
ek açıklama tablo PK için PK bir sınıf haritalar.
Farklılıklar:
- Bakış fiziksel model açısından farklılıklar vardır
EmbeddedId
anahtar bileşik anahtar ve IMO mantıklı bir şekilde daha net bir şekilde iletişim kurarBirleşik pk anlamlı bir varlık ya da kendisi veya kodunuzu yeniden.@IdClass
bazı alanlar kombinasyonu eşsiz olduğunu belirtmek için yararlıdır ama bu özel bir anlamı yok.
Onlar da sorgu (onları daha fazla veya daha az ayrıntılı hale) yazdığınız şekilde etkiler:
IdClass
ileselect t.levelStation from Time t
EmbeddedId
ileselect t.timePK.levelStation from Time t
Referanslar
- JPA 1.0 belirtimi
- Bölüm 2.1.4 "Birincil Anahtarları ve Varlık Kimlik"
- Bölüm 9.1.14 "Embeddedİd Ek Açıklama"
- Bölüm 9.1.15 "İdClass Ek Açıklama"
Eğer belirli bir anahtar C std varsa n...
JAXB: < suya marshall göster nasıl y...
Nasıl yabancı anahtar kısıtlamaları ge...
Nasıl&; quot&; Anahtar Kelime çalışmas...
Nasıl bir JavaScript nesnesi için bir ...