iteye_15788 2010-04-05 10:09
浏览 231
已采纳

hibernate中一对多为什么映射成set而不是list呢

比如如下代码:
[code="java"]# /**

* 用户信息

*/

@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY)

@JoinColumn(name = "comId")

private Set users = new HashSet(); [/code]

[code="java"]# /**

* 用户信息

*/

@OneToMany(cascade=CascadeType.ALL,fetch = FetchType.LAZY)

@JoinColumn(name = "comId")

private List users = new ArrayList(); [/code]

这两个一对多的表现都可以实现,区别在哪里呢。

  • 写回答

1条回答 默认 最新

  • iteye_13460 2010-04-05 11:26
    关注

    [size=x-large][size=large][color=red]首先,你要清楚List和Set的区别:List是有序和可重复;Set是无序,但是不能重复.

    其次,在一对多关联中.想象一下这种情况:你要更新从表记录;

     从List中得到从表的一个对象引用,然后你对这样对象修改后,又放回List,你的List中就包括两个从表对象的引用.你在保存时,这两个引用,你觉得会保存两次还是一次?
    
    
    而如果是Set,你得到从表对象的引用,之后修改从表对象的内容,你再往Set里面放,Set里面因为已经有这个从表对象的引用,就不会再给里面加.这样,你的Set里面还是只有一个从表对象的引用.这样你保存,这个从表对象只保存一次.[/color][/size][/size]
    

    希望对你有帮助..

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用