Hibernate学习22 -- 关联映射12 -- 集合映射

本文介绍如何使用Hibernate框架映射Java对象中的集合属性到数据库表,包括set、list、array和map类型的映射方法,并提供了具体的代码实现示例。

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

在对象中有普通属性,也有可能有集合属性如set、list、array、map,那我们在hibernate中该如何映射呢?我们存储应当如下面显示:

clip_image002

代码实现:

1)        建立一个对象,里面包含普通属性也有集合属性,如listsetarraymap,例如:CollectionMapping.java

public class CollectionMapping {  

    private int id;  

    private String name;

    private Set setValue;   

    private List listValue; 

    private String[] arrayValue;   

    private Map mapValue;

 

2)        建立映射文件,例如:CollectionMapping.hbm.xml

<hibernate-mapping>

    <class name="hibernate.CollectionMapping"

                                    table="t_CollectionMapping">

       <id name="id">

           <generator class="native"/>

       </id>

       <property name="name"/>

       <set name="setValue" table="t_set_value">

           <key column="set_id"/>

           <element type="string" column="set_value"/>

       </set>

       <list name="listValue" table="t_list_value">

           <key column="list_id"/>

           <list-index column="list_index"/>

           <element type="string" column="list_value"/>

       </list>

       <array name="arrayValue" table="t_array_value">

           <key column="array_id"/>

           <list-index column="array_index"/>

           <element type="string" column="array_value"/>

       </array>

       <map name="mapValue" table="t_map_value">

           <key column="map_id"/>

           <map-key type="string" column="map_key"/>

           <element type="string" column="map_value"/>

       </map>

    </class>

</hibernate-mapping>

 

3)        测试代码:

public class CollectionMappintTest extends TestCase {

    public void testSave1() {

       Session session = null;

       CollectionMapping c = new CollectionMapping();

      

       c.setName("xxx");

      

       Set setValue = new HashSet();

       setValue.add("a");

       setValue.add("b");

       c.setSetValue(setValue);

      

       List listValue = new ArrayList();

       listValue.add("c");

       listValue.add("d");

       c.setListValue(listValue);

      

       String[] arrayValue = new String[]{"e", "f"};

       c.setArrayValue(arrayValue);

      

       Map mapValue = new HashMap();

       mapValue.put("k1", "v1");

       mapValue.put("k2", "v2");

       c.setMapValue(mapValue);   

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();

           session.save(c);

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }  

    public void testLoad1() {

       Session session = null;

       try {

           session = HibernateUtils.getSession();

           session.beginTransaction();

           CollectionMapping c =

(CollectionMapping)session.load

(CollectionMapping.class, 1);

           System.out.println("name=" + c.getName());

           System.out.println("setvalue=" +

c.getSetValue());

           System.out.println("mapvalue=" +

c.getMapValue());

           System.out.println("listvalue=" +

c.getListValue());

           session.getTransaction().commit();

       }catch(Exception e) {

           e.printStackTrace();

           session.getTransaction().rollback();

       }finally {

           HibernateUtils.closeSession(session);

       }

    }         

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值