首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java实体-为什么我需要一个空的构造函数?

Java实体-为什么我需要一个空的构造函数?
EN

Stack Overflow用户
提问于 2013-08-07 17:04:45
回答 4查看 80.1K关注 0票数 48

这可能听起来很愚蠢,但是为什么我需要在我的@Entity中定义一个空的构造函数呢?

我看过的每个教程都说:每个实体都需要一个空的构造函数。

但是Java总是给你一个默认的不可见的空构造函数(如果你没有重新定义的话)。

让我澄清一下..。我对“需要”的理解是写。

意思:总是在你的实体中写一个空的构造函数。

示例:

代码语言:javascript
复制
@Entity
public class MyEntity implements Serializable {

   @Id
   private String str;

   public MyEntity(){}

   //here getter and setter
}

但是,当您没有重新定义这个空构造函数(用参数编写另一个构造函数)时,Java总是会给您这个空构造函数。

在这种情况下,编写这个空的构造函数似乎没有用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-07 17:14:52

持久化框架需要一个空的构造函数来通过反射创建一个新的实例。如果您没有为类提供任何带有参数的额外构造函数,则不需要提供空的构造函数,因为每个默认的构造函数都有一个。

您还可以使用@PersistenceConstructor注释,如下所示

代码语言:javascript
复制
@PersistenceConstructor
public Movie(Long id) {
    this.id = id;
}

如果项目中存在Spring数据,则初始化实体。因此,您也可以避免使用空的构造函数。

票数 54
EN

Stack Overflow用户

发布于 2013-08-07 17:07:58

除非为实体提供另一个构造函数,否则不需要显式定义默认构造函数。如果您提供了另一个构造函数,除了具有默认构造函数签名的构造函数之外,将不会创建默认构造函数。

由于JPA实现依赖于默认构造函数的存在,因此有必要包含将被省略的默认构造函数。

票数 7
EN

Stack Overflow用户

发布于 2013-08-07 17:15:36

由于您指定了" JPA“标记,因此我假设您的问题仅适用于JPA,而不适用于一般的空构造函数。

Persitence框架通常使用反射(更具体地说是Class<T>.newInstance() )来实例化对象,然后通过内省调用getter/setter来设置字段。

这就是为什么你需要一个空的构造函数和getters/setters。

请参阅this StackOverflow question about empty constructors in Hibernate.

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18099127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档