xia*_*012 32 java hibernate composite-key
我有两节课.一个是实体类,另一个是复合键类.
代码如下.
@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();
}
Run Code Online (Sandbox Code Playgroud)
如果我用试试找
from Supply where merchandise_id=%d and supplier_id=%d
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
但是,我发现如果我将类 ID更改为静态.一切都会好起来的.
我只是好奇所有这些东西是如何发生的.
Boh*_*ian 44
如果该类不是static,则需要外部类的实例才能实例化 - 因此不会有默认构造函数.你必须使用类似于的语法:
new Supply().new Id();
Run Code Online (Sandbox Code Playgroud)
如果Id是static,你可以打电话:
new Id();
Run Code Online (Sandbox Code Playgroud)
我总是在类中添加一个空的受保护构造函数来解决这个问题,如下所示:
protected Classname(){}
Run Code Online (Sandbox Code Playgroud)
在你的情况下,它看起来像这样:
protected Id(){}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27863 次 |
| 最近记录: |