JPA实现不需要no-arg构造函数

时间:2015-08-18 21:12:40

标签: java jpa default-constructor

是否存在实现JPA但不需要默认的ORM框架 来自@Entity类的(no-arg)构造函数?

AFAIK,在JPA文档中说@Entity应该有默认值 构造函数,但可以实现支持构造函数参数注入 (或者可能是不安全的对象实例化),因此无需使用类  默认构造函数?

此功能有助于确保不变性(标准 JPA缺乏) 并且会让开发人员在类实例状态上保持严格的不变量 (例如,其字段始终具有正确的值)。

顺便说一句,当使用Kotlin时,无需arg构造函数的需要会干扰 良好的代码风格和编码惯例。

JIRM库处理构造函数注入和不变性, 但它不是一个完整的JPA实现。

那么,是否有任何JPA ORM支持没有默认构造函数的@Entity类?

2 个答案:

答案 0 :(得分:3)

  

是否有一个ORM框架实现了JPA,但是不需要@Entity类的默认(非arg)构造函数?

不,因为它会违反规范。以下引用来自JPA 2.1 specification

的第23页
  

实体类必须具有无参数构造函数。实体类也可以有其他构造函数。 no-arg构造函数必须是公共的或受保护的。

话虽如此,可能存在一些部分实现JPA的ORM框架忽略了这个功能。

答案 1 :(得分:0)

是的,我尝试使用EclipseLink 2.5.2,即使未提供它,也可以正常工作。