为什么Hibernate的OneToMany用Set集合而不用list

本文通过一个具体的Java示例,展示了如何理解对象引用的概念,特别是当对象被放入List后,对其属性进行修改时,List中元素的变化情况。这对于深入理解Java内存管理和对象引用非常重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将一个对象放在一个list中,在将这个对象的属性改变,再放入这个list中,这个list中的对象属性是不是一样的呢
user对象实体:
public class User implements Serializable
{
    /**
    *注释内容
    */
    private static final long serialVersionUID = -7674410922088958275L;

    //姓名
    private String name;
   
    //性别
    private String sex;

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }

    public String getSex()
    {
        return sex;
    }

    public void setSex(String sex)
    {
        this.sex = sex;
    }

    @Override
    public String toString()
    {
        return "User [name=" + name + ", sex=" + sex + "]";
    }
   
}


//**改变属性放在同一个list中
public class TestChangeUser
{
    public static void main(String args[])
    {
        User user=new User();
        List<User>userList=new  ArrayList<User>();
        user.setName("呵呵");
        user.setSex("男");
        userList.add(user);
        user.setName("嘻嘻");
        user.setSex("女");
        userList.add(user);
       
        for(User userInfo:userList)
        {
            System.out.println(userInfo);
        }
    }
}
    输出的结果会是: User [name=嘻嘻, sex=女]
                 User [name=嘻嘻, sex=女]

  这个是因为改变前后的user对象始终指向同一个内存区域


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


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

     从List中得到从表的一个对象引用,然后你对这样对象修改后,又放回List,你的List中就包括两个从表对象的引用.你在保存时,这两个引用,你觉得会保存两次还是一次?


    而如果是Set,你得到从表对象的引用,之后修改从表对象的内容,你再往Set里面放,Set里面因为已经有这个从表对象的引用,就不会再给里面加.这样,你的Set里面还是只有一个从表对象的引用.这样你保存,这个从表对象只保存一次.
[/size]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值