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

将一个对象放在一个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();
        ListuserList=new  ArrayList();
        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]

你可能感兴趣的:(java,ee)