在对象中有普通属性,也有可能有集合属性如set、list、array、map,那我们在hibernate中该如何映射呢?我们存储应当如下面显示:
代码实现:
1) 建立一个对象,里面包含普通属性也有集合属性,如list、set、array、map,例如: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); } } } |