2009-07-01 7 views
7

API olarak kullanılan ve diğer modüllerden başvurulan bir arabirim kümesine sahibiz. "Ana" uygulama modülüne özel olan bu arayüzlerin bir dizi somut uygulaması. Bu sınıflar bir dizi ek açıklama içerir (XML serileştirme için JPR ve XStream).Hazırda bekletme ve JPA - Hata Eşleme Bir arabirimden etkilenen katıştırılmış sınıf

Bir sorunla karşılaştım. İçinde yerle ilgili çok sayıda alan bulunan bir kullanıcı sınıfımız var. Bunları bir Adres sınıfına dönüştürmek istiyoruz. Verilerin (şimdilik) aynı tabloda kalmasını istiyoruz. Yaklaşım gömülü bir sınıftır. Sorun, tip imzalarının sadece uyguladıkları arayüzleri karşılamak için diğer arabirimlere başvurmaları gerektiğidir.

org.hibernate.MappingException: Bir UserImpl devam çalıştığınızda

, özel durum almak için Kullanıcı, : masada com.example.Address: için türünü belirlenemedi sütun: [org.hibernate.mapping.Column (adres)]

örnek kod:

interface User { 
    int getId(); 
    String getName(); 
    Address getAddress(); 
} 

@Entity 
class UserImpl implements User { 
    int id; 
    String name; 
    Address address; 

    int getId() { 
     return id; 
    } 

    void setId(int id) { 
     this.id = id; 
    } 

    String getName() { 
     return name; 
    } 

    String setName(String name) { 
     this.name = name; 
    } 

    @Embedded 
    Address getAddress() { 
     return address; 
    } 

    void setAddress(Address address) { 
     this.address = address; 
    } 
} 


interface Address { 
    String getStreet(); 
    String getCity(); 
    String getState(); 
    String getZip(); 
    String getCountry(); 
} 

@Embeddable 
class AddressImpl implements Address { 
    String street; 
    String city; 
    String state; 
    String zip; 
    String country; 

    public String getStreet() { 
     return street; 
    } 

    public String getCity() { 
     return city; 
    } 

    public String getState() { 
     return state; 
    } 

    //... etc 
} 

cevap

13

Benim bu sadece JPA kullanarak yapılabilir diye umuyordum ama o gerçekten de bir çözümdür, (JPA ek açıklamaları için hazırda özgü uzantısıdır) @Target hazırda Ek Açıklama

@Embedded 
@Target(AddressImpl.class) 
Address getAddress() { 
    return address; 
} 
+0

Teşekkür kullanabilirsiniz. Diğer JPA uygulamalarında bunun mümkün olup olmadığını bilmek yardımcı olabilir. –

+0

Bahsettiğiniz istisnai duruma göre, Hazırda bekletme modunu kullandığınızı varsaydım. Şanslar, henüz JPA spesifikasyonlarına eklenmemiş Hazırda Bekletme Eklemelerinin bir parçasıysa. – mtpettyp

+1

Biz, ancak mümkün olduğunda satıcı tarafsız olmak güzel olurdu. –

İlgili konular