带有构造函数的实体对象必须具有缺省构造函数

当 Java 持久性 API (JPA) 实体类具有带有该参数的构造函数时,该类还必须具有缺省的无参数构造函数。OpenJPA 实现会自动生成无参构造函数,但 EclipseLink 实现不会。

该实体类的规则扫描带有 @Entity@MappedSuperclass 注释。将标记有构造函数但也没有无参构造函数的实体类。 快速修订会向类添加空的无参构造函数。

例如,规则标记以下实体类:

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

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

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

该快速修订添加无参构造函数:

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;
    } 
}

有关此问题和其他 OpenJPA 到 EclipseLink 迁移问题的信息,请参阅 OpenJPA to EclipseLink JPA Migration: Mappings 指南。