从 java 8 迁移到 java 11 时出现 JPA/eclipselink 错误

标签 jpa java-8 eclipselink java-11 thorntail

我正在尝试将我的 Thorntail 应用程序从 java 8 迁移到 java 11,但我在实体关系方面遇到问题。使用的映射在 java 8 中工作正常,但在 java 11 中我有这个错误:

2019-07-03 15:48:12,713 ERROR [stderr] (main) Exception Description: 
  Predeployment of PersistenceUnit [p-unit] failed.

2019-07-03 15:48:12,713 ERROR [stderr] (main) Internal Exception: 
  Exception [EclipseLink-7250] (Eclipse Persistence Services - 
   2.7.3.v20180807-4be1041): 
    org.eclipse.persistence.exceptions.ValidationException

2019-07-03 15:48:12,713 ERROR [stderr] (main) Exception Description: 
  [class com.mytest.data.specific.entities.Table3] uses a non-entity 
   [class com.mytest.data.specific.entities.Table2] as target entity 
     in the relationship attribute [field table2].

我的实体映射是这样的:

@MappedSuperclass
public abstract class AbstractIdEntity extends AbstractEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    public Long getId() {
        return id;
    }

    protected void setId(final Long id) {
        this.id = id;
    }
}
@Entity
@Table(name = "table_2")
public class Table2 extends AbstractIdEntity {

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "table_1_id", referencedColumnName = "id")
    private Table1 table1;

    @Column(name = "some_info", nullable = false)
    private String someInfo;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "table_2_id")
    private List<Table3> table3List;
//more stuff
}
@Entity
@Table(name = "table_3")
public class Table3 extends AbstractIdEntity {

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "table_2_id", referencedColumnName = "id")
    private Table2 table2;

    @Lob
    @Column(name = "some_bytes", nullable = false)
    private byte[] someBytes;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "table_3_id")
    private List<Table4> table4List;
//more stuff
}

我尝试删除对父级的子级引用,但 EntityManager 将找不到任何定义的 NamedQuery。我尝试的另一件事是切换到休眠状态,此映射可以工作,但在持久化实体时遇到了一些问题。

我正在使用 Thorntail v2.4.0.Final 和 Eclipselink v2.7.3。

有人知道可能出现什么问题吗?

我在一个小项目中创建了一个类似的层次结构,并将其上传到 github,如果有人想仔细看看 -> githubProject .

最佳答案

这是一个奇怪的异常(exception)。我不知道它是否会修复它,但是您的 @OneToMany 映射应该使用 mappedBy 属性,而不是指定 @JoinColumn 。例如 Table3.table2 应该这样映射:

    @OneToMany(mappedBy="table2", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<Table3> table3List;

关于从 java 8 迁移到 java 11 时出现 JPA/eclipselink 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56873808/

相关文章:

java - 从多个供应商生成一个流

JPA 状态字段路径无法解析为有效类型

Java JPA - 内部联接查询不起作用

java - 如何使用 JPA 计算行数?

java - 为 @GenericGenerator 设置 allocationSize

java - Spring 数据Jpa : Save method only returning select but not performing insert

java - JPA 映射问题 - 请求建模方向

java - 为什么ZonedDateTime和Calendar在2050年的小时数上不一致?

spring-boot - Spring 批量管理升级

java - 只读实体第一次如何持久化