我有两节课。一个是实体类,另一个是组合键类。
代码如下。
@Entity
public class Supply {
@Embeddable
class Id implements Serializable {
@Column(name = "supplier_id")
private long supplierId;
@Column(name = "merchandise_id")
private long merchandiseId;
public Id() {
}
public Id(long sId, long mId) {
this.supplierId = sId;
this.merchandiseId = mId;
}
}
@EmbeddedId
private Id id = new Id();
}
如果我使用尝试查找
from Supply where merchandise_id=%d and supplier_id=%d
Hibernate会抛出一个异常,即:
No default constructor for entity: com.entity.Supply$Id; nested exception is org.hibernate.InstantiationException: No default constructor for entity: com.entity.Supply$Id
但是,我发现如果将类和Id 更改为静态。一切都会好起来的。
我只是对所有这些事情如何发生感到好奇。
最佳答案
如果该类不是static
,则它需要外部类的实例才能实例化-因此将没有默认构造函数。您必须使用类似于以下内容的语法:
new Supply().new Id();
如果
Id
类是static
,则可以调用:new Id();
关于java - Hibernate中没有用于内部类实体的默认构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6805143/