mysql-为什么关联的集合包含空值? (休眠,注释,春季)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql-为什么关联的集合包含空值? (休眠,注释,春季),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1883字,纯文字阅读大概需要3分钟。
内容图文
![mysql-为什么关联的集合包含空值? (休眠,注释,春季)](/upload/InfoBanner/zyjiaocheng/886/027340d83e944ba5aba82d4f8167509d.jpg)
[编辑:显然,这仅是数组的问题,FoxyBOA的答案可能直接指向(甚至是)答案.]
我的问题与以下软件有关:Hibernate3注释,Spring MVC,MySQL,在此示例中还包括Spring Security.
我想知道,为什么Hibernate自动关联的集合对于子表的每个行号都包含空值(除了正确的元素之外).我的例子:
我有一个用户和一个权限表,用户表的主键是用作外键的用户名.现在,我的权限表中有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)元素的“权威”集合,其中只有4个非空元素(数据库表中的四行属于该特定用户,所以是正确的).据我所知,我正在为诸如Fetchmode等属性使用Hibernate默认值.我正在这样获得用户:
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
解决方法:
我可以建议您检查数据.如果您有丢失的索引(本例中为id列),则数组中将为null而不是丢失的id.
即
table authorities:
username id
bob 1
bob 3
bob 5
结果,您将得到一个数组:
{0 = null,1 = bob,2 = null,3 = bob,4 = null,5 = bob}
更新:
我在两种情况下遇到了这种情况:
>权限表中索引列ID中缺少键值(例如0、1、3、4、5-丢失值2.Hibernate将自动添加到键值为2且值为空的数组值).
>索引值是按顺序排列的,但是选择标准过滤它们的一部分(例如,您的HQL与“从用户u加入u.authorities a where a.id = 2”类似).在这种情况下,休眠加载用户,但在权限数组中您将只有3个值:0-空,1-空,2-ID为2的权限.
内容总结
以上是互联网集市为您收集整理的mysql-为什么关联的集合包含空值? (休眠,注释,春季)全部内容,希望文章能够帮你解决mysql-为什么关联的集合包含空值? (休眠,注释,春季)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。