3.1Hibernate-Collection
来源:互联网 发布:linux输入法切换快捷键 编辑:程序博客网 时间:2024/06/11 10:12
1、作用在List上的@OrderColumn和@OrderBy区别
如果想要保持存入顺序与取出顺序,则需要使用。
参考:https://stackoverflow.com/questions/11433195/hibernate-orderby-vs-ordercolumn-to-maintain-the-order-of-a-collection
@OrderBy使用类中的子实体属性作为排序依据。
eg:(摘自Hibernate官方用户手册)
使用该方法存入3个Phone,并设置到Person中的phones集合。结果如下:@Entity(name = "Person")public static class Person { @Id private Long id; @OneToMany(cascade = CascadeType.ALL) @OrderBy("number") private List<Phone> phones;
……//setter、getter方法
}@Entity(name = "Phone")public static class Phone { @Id private Long id; private String type; @Column(name = "number") private String number; ……//setter、getter方法}
使用@OrderBy时,当从数据库中查询遍历结果,查询语句会自动加上order by asc/desc
即上述案例查询语句会类似select ... order by phone.number ASC
但如果list里顺序改变,读出来的元素顺序也会改变
@OrderColumn会在表中添加一列,包含集合中保存的实体在集合里的索引,即使改变了list集合中元素顺序,Hibernate也会改变索引列的对应元素的索引值,所以读取list中元素出来顺序依旧不变。该索引与添加进list的顺序有关,与persist/save顺序无关。
此处疑点(待解决):不明确改变了list集合中元素顺序的情况是怎样,试过remove后再次添加,两者元素顺序都发生改变。使用@OrderBy与@OrderColumn均不受persist顺序影响。
2、Set(如果要保存不重复的数据,需要使用Set集合)
(1)HashSet——实体类重写equals和hashCode方法
(2)SortedSet——实现Comparable接口
测试结果:
运行上面代码会出现错误:
原因:需要加上@SortNatural注解
一个依赖于给定子元素的自然排序顺序,并且该子元素实现了Comparable接口逻辑的SortedSet必须使用@SortNatural 注释来注释。
测试结果:
运行两次结果如下:
3、Map
有些时候,属性的名称可能不确定、经常改变,可以通过Map的key做属性的名称、Map的value作为属性的值。
Map就是【一对多】测试结果:
注解解析:
@MapKey
用于指定Map中的key的关系。当该key为标量类型(直接量)、value为自定义类型或者该key是某个实体类中的属性。
eg1:
eg2:
@MapKeyColumn
指定Map中key的类型
eg:
- 3.1Hibernate-Collection
- hibernate-collection
- hibernate-collection
- hibernate-collection
- Hibernate collection mapping
- hibernate-collection---address
- hibernate-collection---student
- Hibernate FAQ - Collection
- hibernate---->Collection映射
- Hibernate中的Collection cache(集合缓存)
- org.hibernate.DuplicateMappingException: Duplicate collection role mapping
- collection
- collection
- Collection
- collection
- collection
- collection
- Collection
- 电阻式触摸屏的驱动程序和详细注释
- gets和fgets函数的区别
- leetcode 324. Wiggle Sort II
- html中背景图片铺满页面没有重复的效果
- 设计模式之单例模式
- 3.1Hibernate-Collection
- Python 之文件操作
- phpmailer 发送邮件
- SSM框架搭建
- JAVA字符串总结
- Linux基础篇1 搭配工具 几个简单的用户操作命令
- Types of Properties--Data Properties
- 系统性能测试方案
- CSS浮动溢出解决方法