java - 使用属性访问器方法时的 EclipseLink 实体映射问题

标签 java jpa eclipselink

鉴于下面的类,有谁知道为什么 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/

相关文章:

java - 无后端事件不会触发

java - gwt标签点击处理程序问题

java - 使可靠的 Web 服务变得不可靠,但以可控的方式?

java - 一对一关系,只保留外键

Java 缺少 28 秒

java - 如何在Broadleaf中实现自己的ProductImpl?

mysql - 如何在 Spring MVC 中使用 SQL 实现审计跟踪?

java - 容器管理的持久性上下文 : transaction-scoped vs. 扩展 - 如何决定?

java - 在Eclipse链接JPA中移至Java 8时间后derby数据库中的错误

java - JPA,如何插入具有ManyToMany关系的新实体?