(Bearbeiten: Offenbar ist dies nur ein Problem für Arrays und FoxyBOA's Antwort könnte direkt zu (oder sogar ist) die Antwort).
Meine Frage bezieht sich auf diese Software: Hibernate3+Annotation, Spring MVC, MySQL und in diesem Beispiel auch Spring Security.
Ich habe mich gefragt, warum Sammlungen, die automatisch von Hibernate verknüpft werden, Nullwerte für jede Zeilennummer der untergeordneten Tabelle enthalten (neben den Elementen, die korrekt sind). Mein Beispiel:
Ich habe eine Benutzer und ein Behörden Tabelle, der Primärschlüssel der Benutzer Tabelle ist Nutzername der als Fremdschlüssel dient. Im Moment gibt es 13 Zeilen in meinem Behörden Tisch. Wenn ich einen Benutzer aus der Datenbank (MySQL InnoDB) abrufe, ruft Hibernate automatisch die Behörden des Benutzers ab, die dieser Zuordnung entsprechen:
@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;
}
... Am Ende habe ich eine Sammlung "Behörden" mit 14 (0-13) Elementen, von denen nur vier nicht-null sind (vier Zeilen in der Datenbanktabelle gehören zu diesem speziellen Benutzer, das ist also korrekt). Soweit ich weiß, verwende ich Hibernate-Standardwerte für Eigenschaften wie Fetchmode usw. Ich erhalte den Benutzer auf diese Weise:
Criteria criteria = getSession().createCriteria(User.class);
criteria.add(Restrictions.eq("username",username));
User user = (User) criteria.uniqueResult();
Die Protokollierungsinformationen von org.hibernate.loader.loader "erwähnen" korrekt vier Zeilen für die Ergebnismenge. Dennoch hat der erstellte Benutzer die vier richtigen Elemente plus zehn Nullwerte im Array. In meinem konkreten Beispiel führt dies zu dieser Ausnahme:
java.lang.IllegalArgumentException: Granted authority element 0 is null - GrantedAuthority[] cannot contain any null elements