Ошибки JPA / eclipselink при переходе с Java 8 на Java 11 - PullRequest
4 голосов
/ 03 июля 2019

Я пытаюсь перенести приложение 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 .

1 Ответ

2 голосов
/ 04 июля 2019

Это странное исключение. Я не знаю, исправит ли это, но ваши @OneToMany отображения должны использовать mappedBy атрибуты и не указывать @JoinColumn s. Например, Table3.table2 должно отображаться так:

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