我是JPA的新手请和我呆在一起。
显然,毫无疑问,如何以属性访问的方式从外键创建复合主键。
问题
如果使用下面示例中的属性访问类型,是否也必须为引用的FKs定义getter和setter?
我不认为是这样的,但是正式文件 of Java EE6这样做了。
用于J2EE企业JavaBeans开发人员指南的Oracle容器
复合主键类具有以下特征:
可以使复合主键类成为实体类所拥有的嵌入式类,也可以使其字段映射到实体类的多个字段或属性的非嵌入式类。在后一种情况下,复合主键类中的主键字段或属性的名称必须与实体类的名称相对应,它们的类型必须相同。
我修改了这个示例,因为我想使用FKs。
Example 7-2 Embeddable Composite Primary Key Class
@Embeddable
public class EmployeePK implements Serializable {
private String name;
private long id;
public EmployeePK() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public int hashCode() {
return (int) name.hashCode() + id;
}
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof EmployeePK)) return false;
if (obj == null) return false;
EmployeePK pk = (EmployeePK) obj;
return pk.id == id && pk.name.equals(name);
}
}
Example 7-3 JPA Entity With an Embedded Composite Primary Key Class
@Entity
@Access(AccessType.PROPERTY)
public class Employee implements Serializable {
EmployeePK primaryKey;
public Employee() {
}
@EmbeddedId
public EmployeePK getPrimaryKey() {
return primaryKey;
}
public void setPrimaryKey(EmployeePK pk) {
primaryKey = pk;
}
@ManyToOne
@MapsId("id")
private classWithPKid fkobject1;
@ManyToOne
@MapsId("name")
private classWithPKname fkobject2;
...
}发布于 2017-02-17 19:14:44
JPA (2.3.2) -显式访问类型
当Access(属性)应用于实体类、映射的超类或可嵌入类时,映射注释可以放在该类的属性上,而持久性提供程序运行时则通过该类定义的属性访问持久状态。所有没有使用瞬态注释进行注释的属性都是持久的。当访问(属性)被应用到这样的类时,可以有选择地指定类中的单个属性,以便进行实例变量访问。若要指定持久性提供程序运行时访问的持久性实例变量,则必须指定该实例变量为access (字段)。如果在未指定Access(字段)的类定义的任何实例变量上放置映射注释,则行为是未定义的。根据这些超类的访问类型访问从超类继承的持久状态。
JPA (2.3.3) -可嵌入类访问类型
可嵌入类的访问类型由实体类、映射超类或嵌入类的访问类型确定,其中嵌入(包括作为元素集合的成员),而不依赖于包含类的访问类型是否已显式指定或默认。可以通过如上所述的access注释为该可嵌入类指定可嵌入类的不同访问类型。
当AccessType设置为实体类的属性时,提供程序将使用这些方法获取持久状态和映射数据。当类的AccessType是属性时,持久性提供程序不必查找字段上的映射注释。另外,请注意AccessType是由嵌入式类继承的,这就是为什么EmployeePK也需要定义getter/setter。根据规范中的内容,当实体类使用Access(属性)时,应该执行以下操作之一:
https://stackoverflow.com/questions/42254584
复制相似问题