你可以在接口上使用@Embedded,在实现子类时使用@Embeddable吗?

时间:2017-07-21 02:22:41

标签: java hibernate

我是hibernate的新手。我正在尝试存储一种具有一种地址(国内或国际地址)的人。我理解下面的例子对某些人来说可能看起来很糟糕。我们假设这是要求。

我可以使用@Embedded存储一种类型的地址,但我必须说明DomesticAddress或InternationalAddress,但不是地址。

我读了这个post。我认为我的pojo结构并非不合理。有可能吗?

人员表

id       - INT - AUTO-ID
email    - VARCHAR
address1 - VARCHAR
address2 - VARCHAR
address3 - VARCHAR
city     - VARCHAR
state    - VARCHAR
zip      - VARCHAR
country  - VARCHAR

Person.java

@Entity
public class Person {
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;    
    private String email;

    // this works, but does not work for international address!
    @Embedded
    private DomesticAddress address;      

    // this works, but does not work for international address!
    @Embedded
    @Target(DomesticAddress.class)
    private Address address;      

    // this does not work; being ignored! 
    @Embedded
    private Address address;      
    ....
}

注意:地址仅被声明一次。我只想在3种不同的版本中展示它。

Address.java

public interface Address {
    ....
}

DomesticAddress.java

@Embeddable
public class DomesticAddress implements Address {
    private String address1;
    private String address2;
    private String city;
    private String state;
    private String zip;
    ....    
}

InternationalAddress.java

@Embeddable
public class InternationalAddress implements Address {
    private String address1;
    private String address2;
    private String address3;
    private String country;
    ....
}

0 个答案:

没有答案