[編集: どうやら、これは配列のみの問題であり、FoxyBOA の回答はその回答につながる可能性があります (またはそうでさえあります)。
私の質問は、Hibernate3+Annotation、Spring MVC、MySQL、およびこの例では Spring Security のソフトウェアに関するものです。
Hibernate によって自動的に関連付けられるコレクションに、(正しい要素以外に) 子テーブルの各行番号に null 値が含まれているのはなぜだろうと思っていました。私の例:
ユーザーと権限テーブルがあり、ユーザーテーブルの主キーは、外部キーとして機能するユーザー名です。現在、権限テーブルには 13 行あります。データベース (MySQL InnoDB) からユーザーを取得すると、Hibernate はこのマッピングに対応するユーザーの権限を自動的に取得します。
@OneToMany
@JoinColumn(name = "username")
@IndexColumn(name="id") // "id" was the primary key and is used to sort the elements
public Authority[] getAuthorities() {
return authorities;
}
public void setAuthorities(Authority[] authorities) {
this.authorities = authorities;
}
... 14 (0-13) の要素を含むコレクション "authorities" になり、そのうちの 4 つだけが null ではありません (データベース テーブルの 4 つの行はその特定のユーザーに属しているため、正しいです)。私が認識する限り、Fetchmode などのプロパティに Hibernate のデフォルトを使用しています。次のようなユーザーを取得しています。
Criteria criteria = getSession().createCriteria(User.class);
criteria.add(Restrictions.eq("username",username));
User user = (User) criteria.uniqueResult();
org.hibernate.loader.loader からのログ情報は、結果セットの 4 つの行を正しく「言及」します。それでも、作成されたユーザーには、配列内に 4 つの正しい要素と 10 個の null 値があります。私の特定の例では、これにより次の例外が発生します。
java.lang.IllegalArgumentException: Granted authority element 0 is null - GrantedAuthority[] cannot contain any null elements