java - JPA:一个父类(super class)的不同列名称

标签 java jpa eclipselink

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

  1. 类 A 的字段在类 B 中继承
  2. 类 A 的字段在类 C 中继承

我的意思是同时 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;
        ...
    }

它可以应用于扩展映射父类(super class)的实体,或者应用于嵌入字段或属性,以覆盖由映射父类(super class)或可嵌入类(或其属性之一的可嵌入类)定义的基本映射或 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) { ... }
    }

关于java - JPA:一个父类(super class)的不同列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37282311/

相关文章:

java - 投影对象上字符串字段的空值

api - ElementCollection 与 JPQL 方法上的 CriteriaBuilder.isEmpty

java - Java方法参数中的 "int..."是什么?

java - 获取数字为 6 之后的数字,但我想要所有数字

Spring Boot - 不是托管类型

java - 在 Hibernate 中使用多个表获取计数?

mysql - EntityManager 没有持久性提供程序

Glassfish:无法使用 glassfish-web.xml 将数据源 JNDI 名称映射到可移植名称

java - if 语句没有为字数统计程序中的计数器添加值

java - 解析 DBXException java 的最佳方法