当前位置: 首页 > 面试题库 >

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

庾勇军
2023-03-14
问题内容

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

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

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

谢谢。

我认为这是一个语义问题。我所理解的“需求”是书面的。

含义:始终在您的实体中编写一个空的构造函数。

例:

@Entity
public class MyEntity implements Serializable {

   @Id
   private String str;

   public MyEntity(){}

   //here getter and setter
}

但是,当您不重新定义Java时,Java总是会为您提供一个空的构造函数(使用参数编写另一个)。

在这种情况下,编写此空的构造函数似乎毫无用处。


问题答案:

需要一个空的构造函数来通过持久性框架进行反射来创建新实例。如果不为该类的任何其他构造函数提供参数,则不需要提供空的构造函数,因为默认情况下会得到一个。

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

@PersistenceConstructor
public Movie(Long id) {
    this.id = id;
}

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



 类似资料:
  • 问题内容: 这就是我遇到问题的方式。我举一个例子: 这可以。现在,我想通过扩展创建一个子类。所以我写道: 一写完,Eclipse中就出现了一个十字架,单击它,我发现了一条消息: 我用谷歌搜索了问题并添加了 Eclipse也建议这样做。现在我有两个问题。 为什么必须强制使用构造函数?AFAIK不需要创建构造函数,因为JAVA编译器会自动创建默认构造函数以继续其操作。同样从消息中,似乎还需要一个默认的

  • 问题内容: 必须使用无参数构造函数(像Hibernate这样的工具会在此构造函数上使用反射来实例化对象)。 我得到了这个手挥手的答案,但是有人可以进一步解释吗?谢谢 问题答案: hibernate,并且通常通过反射创建对象的代码用于创建类的新实例。此方法需要一个公共的无参数构造函数才能实例化该对象。对于大多数用例,提供无参数构造函数不是问题。 有一些基于序列化的技巧可以解决没有no-arg构造函数

  • 问题内容: 我对此代码有疑问:https : //github.com/reactjs/redux/blob/master/examples/async/containers/App.js 特别: 我猜这是一个两部分的问题。 为什么我需要将句柄更改设置为类的实例,我不能只对handleChange使用静态函数并直接在类中调用它 ? 我不知道这是怎么回事: 谢谢 问题答案: 以相反的顺序回答… 返回

  • 问题内容: 在编组期间,JAXB需要一个公共的无参数构造函数吗? 我正在传递一个对象,而不是一个类。为什么JAXB需要构造函数?要构造什么? 问题答案: 在执行封送操作期间,JAXB实现不应需要无参数构造函数。JAXB确实需要一个解组。通常,在创建JAXBContext时,缺少no- arg构造函数会导致错误。您正在使用的JAXB实现可能会延迟初始化,直到执行实际操作为止。 通常,在将来的JAXB

  • 问题内容: 如果您尝试封送引用了没有no-arg构造函数的复杂类型的类,例如: 与Java一起的JAXB实现,如下所示: JAXB会抛出一个 现在,我了解了为什么JAXB在解组时需要no-arg构造函数-因为它需要实例化该对象。但是为什么JAXB在编组时需要no-arg构造函数? 另外,还有一个问题,为什么Java的JAXB实现会在字段为null时抛出异常,并且无论如何都不会将其编组? 我是否缺少

  • 我试图将构造函数注入模式应用于CDI应用程序中的bean,但遇到以下错误消息: 的确,为了使用构造函数注入模式,我有意地设计了一个需要参数的构造函数的类: 通过查看不可代理bean类型的CDI规范,我看到: 3.15.不可修复的bean类型 容器使用代理提供某些功能。容器不能代理某些合法bean类型: 没有不带参数的非私有构造函数的类, 被宣布为最终的类, 具有非静态的、具有公共可见性、受保护可见