栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

映射同一个类关系-继续

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

映射同一个类关系-继续

只是Facebook和MyFriends

Facebook Notice添加便捷方法和MutableLong(后来,我告诉你为什么使用MutableLong)

public class Facebook {    private MutableLong id = new MutableLong();    public Long getId() { return id.longValue(); }    public void setId(Long id) { this.id.setValue(id); }    public MutableLong getIdAsMutableLong() {        return id;    }    private Collection<MyFriends> myFriends = new ArrayList<MyFriends>();    public Collection<MyFriends> getMyFriends() { return myFriends; }    public void setMyFriends(Collection<MyFriends> myFriends) { this.myFriends = myFriends; }        public void addFriend(Facebook myFriendFacebook) {        myFriends.add(new MyFriends(this, myFriendFacebook));    }}

MyFriends

public class MyFriends {    private MyFriendsId myFriendId;    public MyFriendsId getmyFriendId(){ return this.myFriendId; }    public void setmyFriendId(MyFriendsId myFriendId){ this.myFriendId = myFriendId; }    private Facebook me;    public Facebook getme() { return this.me; }    public void setme(Facebook me){ this.me = me; }    private Facebook myFriend;    public Facebook getmyFriend() { return this.myFriend; }    public void setmyFriend(Facebook friend) { this.myFriend = friend; }    public MyFriends() {}    public MyFriends(Facebook meFacebook, Facebook myFriendFacebook){        this.me = meFacebook ;        this.myFriend = myFriendFacebook;        this.myFriendId = new MyFriendsId(meFacebook.getIdAsMutableLong(), myFriendFacebook.getIdAsMutableLong());    }    public static class MyFriendsId implements Serializable {        private MutableLong meId = new MutableLong();        public Long getMeId() { return this.meId.longValue(); }        public void setMeId(Long id) { this.meId.setValue(id); }        private MutableLong myFriendId = new MutableLong();        public Long getMyFriendId(){ return this.myFriendId.longValue(); }        public void setMyFriendId(Long id) { this.myFriendId.setValue(id); }        public MyFriendsId() {}        public MyFriendsId(MutableLong meId, MutableLong myFriendId) { this.meId = meId; this.myFriendId = myFriendId;        }        @Override        public boolean equals(Object o) { if (!(o instanceof MyFriendsId))     return false; MyFriendsId other = (MyFriendsId) o; return new EqualsBuilder() .append(getMeId(), other.getMeId()) .append(getMyFriendId(), getMyFriendId()) .isEquals();        }        @Override        public int hashCode() { return new HashCodeBuilder() .append(getMeId()) .append(getMyFriendId()) .hashCode();        }    }}

映射

<hibernate-mapping package="br.com._3845772.model.domain">    <class name="User">        <id name="id"> <generator />        </id>        <many-to-one cascade="all"  name="facebook"/>    </class>    <class name="Facebook">        <id name="id"> <generator />        </id>        <bag cascade="all" name="myFriends"> <key column="ME_FACEBOOK_ID" update="false"/> <one-to-many />        </bag>    </class>    <class name="MyFriends">        <composite-id  name="myFriendId"> <key-property column="ME_FACEBOOK_ID" name="meId"/> <key-property column="MY_FRIEND_FACEBOOK_ID" name="myFriendId"/>        </composite-id>        <many-to-one  column="ME_FACEBOOK_ID" insert="false" name="me" update="false"/>        <many-to-one  column="MY_FRIEND_FACEBOOK_ID" insert="false" name="myFriend" update="false"/>    </class></hibernate-mapping>

还有这个样本

Facebook meFacebook = new Facebook();Facebook myFriendFacebook = new Facebook();meFacebook.addFriend(myFriendFacebook);Session session = sessionFactory.openSession();session.beginTransaction();session.save(myFriendFacebook);session.save(meFacebook);session.getTransaction().commit();session.close();

这给了我

Hibernate: insert into Facebook values ( )Hibernate: insert into Facebook values ( )Hibernate: select myfriends_.ME_FACEBOOK_ID, myfriends_.MY_FRIEND_FACEBOOK_ID from MyFriends myfriends_ where myfriends_.ME_FACEBOOK_ID=? and myfriends_.MY_FRIEND_FACEBOOK_ID=?Hibernate: insert into MyFriends (ME_FACEBOOK_ID, MY_FRIEND_FACEBOOK_ID) values (?, ?)

几个注意事项

  • Hibernate 不支持 自动生成复合主键。 您必须先 设置其值,然后再保存
  • 您的数据库 必须支持目标生成器策略 (如果您不知道数据库支持哪种生成器策略,请使用 本机 策略)
  • 每个实体 必须提供一个无参数的构造函数

现在为什么用MutableLong(用Long属性 封装 )而不是Long呢?

Number及其子类(Long为Number)是不可变的。因此,如果要让Facebook.id(由数据库配置)与其对应的MyFriend $MyFriendId.meId共享相同的值,则必须使用MutableLong。当数据库设置Facebook.id时,MyFriend $MyFriendId.meId将自动获得其最新值。但是,如果您使用MutableLong,就会发生这种情况。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401309.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号