hibernate多对多关系

hibernate 多对多关系

2.多对多(举例学生Student与老师Teacher)

	public class Student {
	private Integer sid;
	private String sname;
	//学生可以是由多个老师教
	private Set<Teacher> teachers=new HashSet<Teacher>();
	}
	public class Teacher {
	private Integer tid;
	private String tname;
	//老师教多个学生
	private Set<Student> students=new HashSet<Student>();
	}

在实体类的映射文件中

<!--Student-->
<hibernate-mapping>
    <class name="com.d.entity.Student" table="STUDENT">
        <id name="sid" type="java.lang.Integer">
            <column name="SID" />
            <generator class="native" />
        </id>
        <property name="sname" type="java.lang.String">
            <column name="SNAME" />
        </property>
        
        <!--配置多对多-->
        <set name="teachers" table="stu_tea">
            <key>
                <column name="SID" />
            </key>
            <many-to-many class="com.d.entity.Teacher" column="rid">		</many-to-many>
        </set>
        
    </class>
</hibernate-mapping>
<!--Teacher-->
		<hibernate-mapping>
    <class name="com.d.entity.Teacher" table="TEACHER">
        <id name="tid" type="java.lang.Integer">
            <column name="TID" />
            <generator class="native" />
        </id>
        <property name="tname" type="java.lang.String">
            <column name="TNAME" />
        </property>
        
        <!--配置多对多-->
        //table:是中间关系表,是要在数据库有的表
        <set name="students" table="stu_tea" inverse="true" cascade="all">
            <key>
            //column:是指向关系类中自己的外键
                <column name="TID" />
            </key>
            //many是指对应的多对多的实体类
            <many-to-many class="com.d.entity.Student" column="sid"></many-to-many>
        </set>
        
    </class>
</hibernate-mapping>

测试

public class TestCRUD {
	private Configuration c;
	private SessionFactory s;
	private Session session;
	private Transaction t;

	@Before
	public void befor() {
		c = new Configuration().configure();
		s = c.buildSessionFactory();
		session = s.openSession();
		t = session.beginTransaction();
	}
	
	@Test
	public void test() {
		System.out.println("进来了");
		//查询
		/*List<Student> list = session.createQuery(" from Student").list();
		for (Student student : list) {
			for (Teacher t : student.getTeachers()) {
				System.out.println(student.getSname()+":"+t.getTname());
			}
		}*/
		
		//添加
		/*Teacher t1=session.get(Teacher.class, 1);
		Student s3 =new Student("liu");
			//互设
		t1.getStudents().add(s3);
		s3.getTeachers().add(t1);
		session.save(t1);*/
		
		//删除
		/*Teacher t2=session.get(Teacher.class, 1);
		Student s4 = session.get(Student.class, 2);
		session.delete(s4);*/
		
		
		
	}
	
	@After
	public void after() {
		t.commit();
		session.close();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值