这可能听起来很愚蠢,但是为什么我需要在我的@Entity
中定义一个空的构造函数呢?
我看过的每个教程都说:每个实体都需要一个空的构造函数。
但是Java总是给你一个默认的不可见的空构造函数(如果你没有重新定义的话)。
让我澄清一下..。我对“需要”的理解是写。
意思:总是在你的实体中写一个空的构造函数。
示例:
@Entity
public class MyEntity implements Serializable {
@Id
private String str;
public MyEntity(){}
//here getter and setter
}
但是,当您没有重新定义这个空构造函数(用参数编写另一个构造函数)时,Java总是会给您这个空构造函数。
在这种情况下,编写这个空的构造函数似乎没有用。
发布于 2013-08-07 17:14:52
持久化框架需要一个空的构造函数来通过反射创建一个新的实例。如果您没有为类提供任何带有参数的额外构造函数,则不需要提供空的构造函数,因为每个默认的构造函数都有一个。
您还可以使用@PersistenceConstructor注释,如下所示
@PersistenceConstructor
public Movie(Long id) {
this.id = id;
}
如果项目中存在Spring数据,则初始化实体。因此,您也可以避免使用空的构造函数。
发布于 2013-08-07 17:07:58
除非为实体提供另一个构造函数,否则不需要显式定义默认构造函数。如果您提供了另一个构造函数,除了具有默认构造函数签名的构造函数之外,将不会创建默认构造函数。
由于JPA实现依赖于默认构造函数的存在,因此有必要包含将被省略的默认构造函数。
发布于 2013-08-07 17:15:36
由于您指定了" JPA“标记,因此我假设您的问题仅适用于JPA,而不适用于一般的空构造函数。
Persitence框架通常使用反射(更具体地说是Class<T>.newInstance()
)来实例化对象,然后通过内省调用getter/setter来设置字段。
这就是为什么你需要一个空的构造函数和getters/setters。
请参阅this StackOverflow question about empty constructors in Hibernate.
https://stackoverflow.com/questions/18099127
复制相似问题