hibernate map映射(value为简单类型)

     有时候我们的类中属性的类型会是map类型的,那么map类型的值如何映射到数据库中呢?

   hibernate映射map类型的值时,map中的key和value是保存在另外一张表中的,且表里有外键引用了他所属类的主键。

   看看下面的标签:

   

     <map name="students" table="student">
           <key column="teamid"></key>
           <index column="sno" type="java.lang.String"></index>
           <element column="name" type="java.lang.String"></element>
        </map>

   map标签指明了要映射的属性,key指明了map对应的表中有一个字段为teamid外键,引用了他所属类的主键。

   index标签对应 map中的key

   element标签对应map中的value

   这时候我们就可以映射map属性了。

   我们看个完整的例子

   Team 类

   

package com.shizhan.po;

import java.util.HashMap;
import java.util.Map;

public class Team {
	
	private long   id ;
	private String name ;
	private Map  students = new HashMap();
	
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Map getStudents() {
		return students;
	}
	public void setStudents(Map students) {
		this.students = students;
	}


}

   team的映射文件:

   

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<hibernate-mapping>

   <class  name="com.shizhan.po.Team" table="team">
         <id name="id" type="java.lang.Long">  
            <generator class="increment" />  
        </id>  
        
        <property name="name" />  
        
        <map name="students" table="student">
           <key column="teamid"></key>
           <index column="sno" type="java.lang.String"></index>
           <element column="name" type="java.lang.String"></element>
        </map>
        
        
   </class>
    
</hibernate-mapping>  

    看看hibernate帮我们生成表的ddl语句。

    

 create table student (
        teamid number(19,0) not null,
        name varchar2(255 char),
        sno varchar2(255 char) not null,
        primary key (teamid, sno)
    )

    create table team (
        id number(19,0) not null,
        name varchar2(255 char),
        primary key (id)
    )

    alter table student 
        add constraint FK8FFE823B5FDC8E78 
        foreign key (teamid) 
        references team

     map对应的值 生成了一张表 student,student中的字段teamid引用了team表的teamid字段,student中teamid和 name字段 形成组合主键。


     测试代码:

     

  	Session session = DBUtil.getSession();
    	Transaction tx = session.beginTransaction();
    	
    	try {
			Team t = new Team();
			t.setName("非师三班");
			Map students = new HashMap();
			students.put("090811342", "shizhan");
			students.put("090811343", "rrrr");
			students.put("090811344", "ttttt");
			students.put("090811345", "wwww");
			t.setStudents(students);
			
			session.save(t);
			tx.commit();
		} catch (Exception e) {
			tx.rollback();
			e.printStackTrace();
		} finally{
			session.close();
		}

  我们可以看到 team表 和student表都生成了我们预期的数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值