hibernateは、フィールドまたはプロパティアクセス戦略をサポートするORMフレームワークです。ただし、コンストラクタベースのマッピングはサポートされていません。-のようないくつかの問題のため
1ºクラスに多くのコンストラクターが含まれているかどうか
public class Person {
private String name;
private Integer age;
public Person(String name, Integer age) { ... }
public Person(String name) { ... }
public Person(Integer age) { ... }
}
ご覧のとおり、Hibernateはどのコンストラクターを呼び出すかを想定できないため、不整合の問題に対処します。たとえば、格納されているPersonオブジェクトを取得する必要があるとします。
Person person = (Person) session.get(Person.class, <IDENTIFIER>);
Personオブジェクトを取得するためにHibernateが呼び出すコンストラクタはどれですか?見えますか?
2º最後に、リフレクションを使用することにより、Hibernateは引数のないコンストラクターを介してクラスをインスタンス化できます。だからあなたが呼び出すとき
Person person = (Person) session.get(Person.class, <IDENTIFIER>);
Hibernateは以下のようにPersonオブジェクトをインスタンス化します
Person.class.newInstance();
APIドキュメントによると
クラスは、空の引数リストを持つ新しい式のようにインスタンス化されます
この話の教訓
Person.class.newInstance();
と類似しています
new Person();
他には何もない
The no-argument constructor is a requirement
間違っているとの主張と、これがなぜそうであるかを説明するために進むすべての回答は、これが実際にそうであるかどうかを疑うことなく、間違っています(報奨金を受け取ったとしても受け入れられた回答を含む)。この回答を参照してください:stackoverflow.com/a/29433238/773113