我们可以从@Embedded类扩展@Entity类

时间:2012-07-20 14:50:26

标签: hibernate jpa

@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是一个地址,因此将Address类的组合写入AddressHistory并不好。然后我决定从Address类扩展AddressHistory。当我这样做时,我知道hibernate给我这个错误

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

但显然我已经映射了AddressHistory 我们可以这样做吗?我们可以从嵌入式类扩展实体吗?

1 个答案:

答案 0 :(得分:0)

不,实体无法扩展嵌入。在JPA 2.0规范中,这被告知如下:

  

实体可以拥有非实体超类,可以是a   具体或抽象类。[22]
  ...
  [22]超类不能是一个   可嵌入的类或id类。

关系的目标也必须是实体。嵌入不是实体,它没有自己的身份。如果您想收集嵌入式内容,请使用@ElementCollection