鉴于下面的类,有谁知道为什么 JPA 的 EclipseLink 实现无法将它们映射到数据库实体?返回以下错误:
实体类 [class com.my.entity.Y] 没有指定主键。它应该定义一个@Id、@EmbeddedId 或一个@IdClass。如果您使用这些注释中的任何一个定义了 PK,那么请确保您的实体类层次结构中没有混合访问类型(注释的字段和属性)。
@Entity
@Access(AccessType.PROPERTY)
public interface Y {
void setId(Long id);
@Id
Long getId();
}
@Entity
public class Z implements Y {
long id;
@Override
public void setId(Long id) {
this.id = id;
}
@Override
public Long getId() {
return id;
}
}
非常感谢
最佳答案
EclipseLink 确实支持接口(interface)的查询和关系,但目前不支持注释。
要映射接口(interface),您可以使用 SessionCustomizer。
public class MyCustomizer implements SessionCustomizer {
public void customize(Session session) {
RelationalDescriptor descriptor = new RelationalDescriptor();
descriptor.setJavaInterface(Y.class);
descriptor.setAlias("Y");
session.addDescriptor(descriptor);
}
}
映射接口(interface)允许查询返回其任何子类的接口(interface),并定义与接口(interface)的关系。
如果通过@VariableOneToOne 注释使用接口(interface),它将自动映射。
关于java - 使用属性访问器方法时的 EclipseLink 实体映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6767572/