【问题标题】:Why do we need to declare NOT empty constructor in entity?为什么我们需要在实体中声明 NOT 空构造函数?
【发布时间】:2017-12-07 21:31:01
【问题描述】:

我知道没有参数的构造函数必须在Entity中。但最近,我也看到了带参数的构造函数。我不明白为什么需要它以及它是如何工作的。

【问题讨论】:

  • 不确定我是否收到您的问题。那么,什么让你感到困惑?可能是你可以举个例子吗?如果我们谈论存在两个构造函数的情况 - 是的,这是可能的。这称为重载。
  • 对于要由框架通过反射实例化的实体,至少必须有一个空构造函数。只要您有一个空构造函数,其他可用的构造函数并不重要。实体可以有尽可能多的构造函数,只要有一个空值。你在哪里看到的?
  • 为什么需要构造函数在另一个类中的参数是相同的实体。作为类数据的主要表示的主要文件可以使用构造函数构建,辅助文件 - 使用设置器。顺便说一句,如果你不这样做,java 会隐式提供空构造函数。
  • @J-Alex 是的,这就是我的问题的答案!
  • 事实上,除了默认(无参数)构造函数之外,您不需要任何其他构造函数。如果你认为你这样做,那么清楚地说明你为什么这么认为,如果你没有例外,你会得到什么。拥有一些身份字段与 JPA 实体的要求完全无关

标签: java spring hibernate jpa constructor


【解决方案1】:

对于休眠实体,您应该提供至少一个不带参数的默认构造函数。如果您的实体有很多字段并且其中只有几个字段,您可以使用强制参数创建构造函数/构造函数,但默认构造函数(不带参数)应该在实体中。

作为实体,它是一个普通类,您不仅可以将其用于休眠映射,还可以用于其他组件。

你也可以添加静态工厂方法来轻松创建类。

例如:

@Entity
class User{
//mandatory fields
private Long id;
private String userName;

//not mandatory fields:
private Date registrationDate;
private String nickName;

   public User(){//it's default constructor for hibernate entity creation 
   }

   public User( Long id ,String userName){ // you can create entity whenever when you want to create entity
....
   }
}

with User( Long id ,String userName) - 你声明如果你需要 User 实例 您应该使用必填字段创建它。

如果你有 User() 构造函数,很难理解哪些参数是强制性的

【讨论】:

    【解决方案2】:

    在内部使用 newInstance() 方法创建实体实例,此方法仅适用于默认构造函数。如果您提供任何参数化构造函数以及我们必须提供默认构造函数。

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 1970-01-01
      • 2015-01-27
      • 2013-07-06
      • 2022-01-15
      • 2023-04-09
      • 1970-01-01
      • 2019-11-05
      • 2021-06-11
      相关资源
      最近更新 更多