Obiekty Entity z konstruktorami, muszą mieć również konstruktor domyślny

Jeśli klasa jednostki interfejsu API Java Persistence (JPA) ma konstruktor z argumentami, klasa ta musi mieć również bezargumentowy konstruktor domyślny. Implementacja OpenJPA automatycznie generuje konstruktor bezargumentowy, ale implementacja EclipseLink tego nie robi.

Ta reguła przeprowadza skanowanie w poszukiwaniu klas jednostki z adnotacją @Entity lub @MappedSuperclass. Klasy jednostki z konstruktorami, które nie mają również konstruktora bezargumentowego, zostają oznaczone. Szybka poprawka dodaje do klasy pusty konstruktor bezargumentowy.

Na przykład reguła oznacza następującą klasę jednostki:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class MissingNoArgConstructorEntity {
    @Id
    private int id;

    public MissingNoArgConstructorEntity(int id) {
        this.id = id;
    }
}

Szybka poprawka dodaje konstruktor bezargumentowy:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class MissingNoArgConstructorEntity {
    @Id
    private int id;

    public MissingNoArgConstructorEntity() {
    }
    
    public MissingNoArgConstructorEntity(int id) {
        this.id = id;
    } 
}

Informacje na ten temat oraz na temat innych problemów z migracją interfejsu OpenJPA do interfejsu EclipseLink zawiera podręcznik Migracja interfejsu JPA ze środowiska OpenJPA do EclipseLink: Odwzorowania.