hibernate一对多关联(五)

来源:互联网 发布:网络签约作家 编辑:程序博客网 时间:2024/06/10 22:30

一对多的双向关联

publicclassUserimplements Serializable {

   privateIntegerid;

   privateStringname;

   privateIntegerage;

   privateCardcard;

    privateSet cards;

 

publicclassCardsimplements Serializable {

   privateIntegercid;

   privateStringinfo;

private Useruser;

 

Cards.hbm.xml

<classname="org.hibernate.tutorial.domain.Cards"table="cards">

   <idname="cid"type="java.lang.Integer"column="cid">

        <generatorclass="native"/>

   </id>

     <propertyname="info"type="java.lang.String"column="info"length="255"/>

    <many-to-onename="user" column="uid"cascade="all"/>

</class>

 

User.hbm.xml

    <classname="org.hibernate.tutorial.domain.User"table="user">

        <idname="id"type="java.lang.Integer"column="id">

            <generatorclass="native"/>

        </id>

        <propertyname="name"type="java.lang.String"column="name"/>

        <propertyname="age"type="java.lang.Integer"column="age"/>

            <set name="cards"inverse="false"cascade="all">

            <key>

                <columnname="uid"/>

            </key>

            <one-to-manyclass="org.hibernate.tutorial.domain.Cards"/>

        </set>

    </class>

 

测试

       

            Useruser2=newUser();

            user2.setName("Lucy46");

            user2.setAge(29);

//          session.save(user);

           

            Cardscard=newCards();

            card.setInfo("acard");

           

            card.setUser(user2);

           

            Set<Cards>s =new HashSet<Cards>();

            user2.setCards(s);

            user2.getCards().add(card);

 

            session.save(card);

//          session.save(user2);

 

测试时候,session.save保存任意的card或则user都是可以级联插入的.

其中inverse="false",如果配置成false,那么关联关系由one方维护,那么插入时会产生三条语句,

Hibernate: insert into user (name,age) values (?, ?)

Hibernate: insert into cards (info,uid) values (?, ?)

Hibernate: update cards set uid=?where cid=?

如果inverse=“true”,那么关联关系由many方维护,插入只需要两条语句,应该效率会搞点。

Hibernate: insert into user (name,age) values (?, ?)

Hibernate: insert into cards (info,uid) values (?, ?)

0 0