为什么 JPA 需要域对象的无参数构造函数?

2022-09-02 20:59:11

为什么 JPA 需要域对象的无参数构造函数?我正在使用eclipselink,只是在部署期间得到了这个异常。

Exception [EclipseLink-63] (Eclipse Persistence Services-1.1.0.r3639-SNAPSHOT): 
org.eclipse.persistence.exceptions.DescriptorException

Exception Description: The instance creation method   
[com.me.model.UserVO.<Default Constructor>], with no parameters, 
  does not exist, or is not accessible.
Internal Exception: java.lang.NoSuchMethodException: 
  com.me.model.UserVO.<init>()
Descriptor: RelationalDescriptor(com.me.model.UserVO --> 
  [DatabaseTable(user)])

答案 1

因为经常发生 JPA 提供程序必须动态实例化域对象的情况。它不能这样做,除非有一个no-arg构造函数 - 它无法猜测参数应该是什么。


答案 2

另请注意,这与提供程序无关。它是一个 JPA 规范。

JPA v2.0 JSR-317 和 v2.1 JSR-338 说:

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


推荐