[Редактировать: По-видимому, это проблема только для массивов, и ответ FoxyBOA может направить (или даже является) ответ.]
Мой вопрос касается следующих программ: Hibernate3 + Annotation, Spring MVC, MySQL и в этом примере также Spring Security.
Мне было интересно, почему коллекции, которые автоматически связываются с Hibernate, содержат нулевые значения для каждого номера строки дочерней таблицы (кроме правильных элементов). Мой пример:
У меня есть пользователи и полномочия , первичный ключ таблицы users - username , который служит внешним ключом , Сейчас в моей таблице полномочия есть 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) элементов, из которых только четыре не равны нулю (четыре строки в таблице базы данных принадлежат этому конкретному пользователю, так что это правильно). Насколько я понимаю, я использую значения по умолчанию Hibernate для таких свойств, как Fetchmode и т. Д. Я получаю пользователя следующим образом:
Criteria criteria = getSession().createCriteria(User.class);
criteria.add(Restrictions.eq("username",username));
User user = (User) criteria.uniqueResult();
Информация журнала из org.hibernate.loader.loader правильно "упоминает" четыре строки для набора результатов. Тем не менее, созданный пользователь имеет четыре правильных элемента плюс десять нулевых значений в массиве. В моем конкретном примере это приводит к следующему исключению:
java.lang.IllegalArgumentException: Granted authority element 0 is null - GrantedAuthority[] cannot contain any null elements