JPA:一个超级 class 的不同列名
JPA: different column names for one super class
假设,我们有三个 classes:A、B、C。 B扩展A,C扩展A。是否可以(原则上,例如动态地)设置不同的列名:
- class A 的字段继承于 class B
- classA 的字段继承于 classC
我同时指的是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;
...
}
它可以应用于扩展映射超级class的实体或嵌入字段或属性以覆盖映射超级[=18=定义的基本映射或id映射] 或可嵌入 class(或其属性之一的可嵌入 class)。
如果未指定 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) { ... }
}
假设,我们有三个 classes:A、B、C。 B扩展A,C扩展A。是否可以(原则上,例如动态地)设置不同的列名:
- class A 的字段继承于 class B
- classA 的字段继承于 classC
我同时指的是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;
...
}
它可以应用于扩展映射超级class的实体或嵌入字段或属性以覆盖映射超级[=18=定义的基本映射或id映射] 或可嵌入 class(或其属性之一的可嵌入 class)。 如果未指定 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) { ... }
}