SORU
27 AĞUSTOS 2010, Cuma


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
27 AĞUSTOS 2010, Cuma


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 hashCodetanı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.
  • @IdClassbazı 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 ile

    select t.levelStation from Time t
    
  • EmbeddedId ile

    select 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"

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Peyton

    Peyton

    28 Aralık 2008
  • PomplamooseMusic

    PomplamooseM

    28 HAZİRAN 2008
  • pucksz

    pucksz

    24 Mart 2006