Java Hibernate真的不需要args构造函数吗?

Java Hibernate真的不需要args构造函数吗?,java,spring-boot,hibernate,Java,Spring Boot,Hibernate,众所周知,Hibernate不需要args构造函数,但我试图删除它,令人惊讶的是,一切正常。 我在我的项目中使用Spring Boot,当我运行该程序时,我收到以下消息: 2020-09-04 00:13:24.749 INFO 12825 --- [ task-1] org.hibernate.tuple.PojoInstantiator : HHH000182: No default (no-argument) constructor for class: com.

众所周知,Hibernate不需要args构造函数,但我试图删除它,令人惊讶的是,一切正常。 我在我的项目中使用Spring Boot,当我运行该程序时,我收到以下消息:

2020-09-04 00:13:24.749  INFO 12825 --- [         task-1] org.hibernate.tuple.PojoInstantiator     : HHH000182: No default (no-argument) constructor for class: com.jb.couponSystem.data.entity.Coupon (class must be instantiated by Interceptor)
实例化我的类的拦截器是什么?为什么在其他项目中,如果我没有args构造函数,Hibernate会抛出异常(如预期的那样)

这是一个类,我使用Lombok@Data来减少样板代码:

@Entity
@Data
public class Coupon {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Setter(AccessLevel.NONE)
private long id;
@Setter(AccessLevel.NONE)
@Column(nullable = false)
private  String title;
@Setter(AccessLevel.NONE)
@Column(nullable = false)
private LocalDate startDate;
@Setter(AccessLevel.NONE)
@Column(nullable = false)
private LocalDate endDate;
@Setter(AccessLevel.NONE)
@Column(nullable = false)
private Category category;
private int amount;
@Setter(AccessLevel.NONE)
@Column(nullable = false)
private String description;
@Setter(AccessLevel.NONE)
@Column(nullable = false)
private double price;
@Setter(AccessLevel.NONE)
private String imageURL;
@ManyToOne
@JoinColumn(name = "company_id")
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private Company company;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
@ManyToMany
@JoinTable(name = "customer_coupon",
        joinColumns = @JoinColumn(name = "coupon_id"),
        inverseJoinColumns = @JoinColumn(name = "customer_id"),
        uniqueConstraints = @UniqueConstraint(columnNames
                = {"customer_id", "coupon_id"}))
private List<Customer> customers;


public Coupon(String title, LocalDate startDate, LocalDate endDate,
              Category category, int amount, String description, double price, String imageURL) {
    this.title = title;
    this.startDate = startDate;
    this.endDate = endDate;
    this.category = category;
    this.amount = amount;
    this.description = description;
    this.price = price;
    this.imageURL = imageURL;
}


public boolean isOutOfStock() {
    return amount <= 0;
}
@实体
@资料
公务舱优惠券{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
@Setter(AccessLevel.NONE)
私人长id;
@Setter(AccessLevel.NONE)
@列(nullable=false)
私有字符串标题;
@Setter(AccessLevel.NONE)
@列(nullable=false)
私有LocalDate开始日期;
@Setter(AccessLevel.NONE)
@列(nullable=false)
私有LocalDate-endDate;
@Setter(AccessLevel.NONE)
@列(nullable=false)
私人类别;
私人整数金额;
@Setter(AccessLevel.NONE)
@列(nullable=false)
私有字符串描述;
@Setter(AccessLevel.NONE)
@列(nullable=false)
私人双价;
@Setter(AccessLevel.NONE)
私有字符串imageURL;
@许多酮
@JoinColumn(name=“公司id”)
@JsonProperty(access=JsonProperty.access.WRITE_ONLY)
私营公司;
@JsonProperty(access=JsonProperty.access.WRITE_ONLY)
@许多
@JoinTable(name=“客户\优惠券”,
joinColumns=@JoinColumn(name=“优惠券id”),
inverseJoinColumns=@JoinColumn(name=“customer\u id”),
uniqueConstraints=@UniqueConstraint(列名称
={“客户id”、“优惠券id”})
私人名单客户;
公共优惠券(字符串标题、LocalDate开始日期、LocalDate结束日期、,
类别、整数金额、字符串描述、双倍价格、字符串图像URL){
this.title=标题;
this.startDate=startDate;
this.endDate=endDate;
this.category=类别;
这个。金额=金额;
this.description=描述;
这个价格=价格;
this.imageURL=imageURL;
}
公共布尔值isOutOfStock(){

返回量这是否回答了您的问题?尤其是这个答案:?@kasptom这是一个有趣的答案,但它假设您实现了拦截器的instantiate()方法。在我的例子中,我没有这样做。Spring Boot在创建会话工厂时是否会传递一个已经实现的拦截器?