Hibernateの内部クラスのエンティティにデフォルトコンストラクタがありません 質問する

Hibernateの内部クラスのエンティティにデフォルトコンストラクタがありません 質問する

クラスが 2 つあります。1 つはエンティティ クラスで、もう 1 つは複合キー クラスとして機能します。

コードは以下のとおりです。

@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

しかし、私が変化すればクラス 識別子静的。 何もかも良くなるだろう。

これらすべてのことがどのように起こるのか、ただ興味があります。

ベストアンサー1

クラスが でない場合static、インスタンス化するには外部クラスのインスタンスが必要です。そのため、デフォルトのコンストラクターはありません。次のような構文を使用する必要があります。

new Supply().new Id();

Idクラスが の場合はstatic、次のように呼び出すだけです。

new Id();

おすすめ記事