我有两节课。一个是实体类,另一个是组合键类。

代码如下。

@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/

10-10 21:57