2012-07-20 79 views
1
@Embeddable 
@MappedSuperclass 
public class Address { 
    private String street; 
    private String city; 

public String getStreet(){ return street;} 
public String getCity(){ return city;} 
public String setStreet(Sting street){ this.street= street;} 
public String setCity(String city){ this.city=city;} 

} 

import org.hibernate.annotations.Entity; 
@Entity 
public class AddressHistory extends Address { 
Long id; 
@Id @XmlTransient 
@GeneratedValue(strategy = GenerationType.AUTO) 
    public Long getId() { 
    return m_id; 
    } 

public void setId(Long m_id) { 
    this.m_id = m_id; 
} 
} 

這是我的場景,我想存儲一個人的地址。而且我還必須存儲一個人以前住過的所有地址。所以我正在做的是我在人表中嵌入當前地址,並希望將他/她的所有前面的地址存儲在歷史表中。爲了達成這個。我讓Address類可嵌入並嵌入到person表和HistoryAddress表中。但是就OOPS概念而言。 HistoryAddress是一個地址,所以將地址類組合成AddressHistory並不好。然後我決定從Address類擴展AddressHistory。但是當我做這個休眠給了我這個錯誤我們可以從@Embedded擴展@Entity類

Use of @OneToMany or @ManyToMany targeting an unmapped class AddressHistory. 

但顯然我已經映射AddressHistory 我們能做到這一點?我們可以從嵌入式類擴展實體嗎?

回答

0

不,實體不能擴展可嵌入。在JPA 2.0規範,這是告訴如下:

一個實體可以具有非實體的超類,其可以是一個 具體或抽象類[22]。
...
[22]超類不能是可嵌入類或id類的 。

關係的目標必須是實體。 Embeddable不是實體,它沒有自己的身份。如果你想收集嵌入式,請使用@ElementCollection