Java JPA:一个超类的不同列名

Java JPA:一个超类的不同列名,java,jpa,eclipselink,Java,Jpa,Eclipselink,假设我们有三个类:A、B、C。B扩展A、C扩展A。是否可以(原则上,例如动态地)为以下内容设置不同的列名: 类B中继承的类A的字段 类C中继承的类A的字段 我是说1和2同时出现。我使用eclipselink。是的,这是可能的,可以通过以下方式完成 @Embeddable public class Address { protected String street; protected String city; protected String st

假设我们有三个类:A、B、C。B扩展A、C扩展A。是否可以(原则上,例如动态地)为以下内容设置不同的列名:

  • 类B中继承的类A的字段
  • 类C中继承的类A的字段

  • 我是说1和2同时出现。我使用eclipselink。

    是的,这是可能的,可以通过以下方式完成

    @Embeddable public class Address {
            protected String street;
            protected String city;
            protected String state;
            @Embedded protected Zipcode zipcode;
        }
    
        @Embeddable public class Zipcode {
            protected String zip;
            protected String plusFour;
        }
    
        @Entity public class Customer {
            @Id protected Integer id;
            protected String name;
            @AttributeOverrides({
                @AttributeOverride(name="state",
                                   column=@Column(name="ADDR_STATE")),
                @AttributeOverride(name="zipcode.zip",
                                   column=@Column(name="ADDR_ZIP"))
            })
            @Embedded protected Address address;
            ...
        }
    
    它可以应用于扩展映射超类的实体或嵌入字段或属性,以覆盖由映射超类或可嵌入类(或其属性之一的可嵌入类)定义的基本映射或id映射。 如果未指定AttributeOverride,则该列的映射与原始映射中的相同

    在下面的示例中,它应用于实体

     @MappedSuperclass
        public class Employee {
            @Id protected Integer id;
            @Version protected Integer version;
            protected String address;
            public Integer getId() { ... }
            public void setId(Integer id) { ... }
            public String getAddress() { ... }
            public void setAddress(String address) { ... }
        }
    
        @Entity
        @AttributeOverride(name="address", column=@Column(name="ADDR"))
        public class PartTimeEmployee extends Employee {
            // address field mapping overridden to ADDR
            protected Float wage();
            public Float getHourlyWage() { ... }
            public void setHourlyWage(Float wage) { ... }
        }
    

    @尼尔·斯托克顿谢谢你抽出时间。但根据JPA,这是可能的,还是这就是日食的特点?根据JPA的说法,可以使用注释吗。请看@AttributeOverride@Neil Stockton非常感谢您的帮助!