hibernate MTM 联合主键

Posted 理想的诱惑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hibernate MTM 联合主键相关的知识,希望对你有一定的参考价值。

//适用于表里没有其他列,只有主键
//Course.java实体类
package com.tao.pojo;

import java.util.HashSet;
import java.util.Set;

public class Course {
    private int id;
    private String name;
    private Set<Student> stu=new HashSet<Student>();
    
    public Course() {
        super();
    }
    public Course(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Set<Student> getStu() {
        return stu;
    }
    public void setStu(Set<Student> stu) {
        this.stu = stu;
    }
    @Override
    public String toString() {
        return "Course [id=" + id + ", name=" + name + "]";
    }
    

}

//Student.java实体类

package com.tao.pojo;

import java.util.HashSet;
import java.util.Set;

public class Student {
    private int id;
    private String name;
    private String gender;
    private Set<Course> cou=new HashSet<Course>();
    
    public Student() {
        super();
    }
    public Student(int id, String name, String gender) {
        super();
        this.id = id;
        this.name = name;
        this.gender = gender;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }
    public Set<Course> getCou() {
        return cou;
    }
    public void setCou(Set<Course> cou) {
        this.cou = cou;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", gender=" + gender + "]";
    }
    

}


//配置文件
//course.hbm.xml文件名 
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

    <class name="com.tao.pojo.Course" table="course">
        <id name="id">
        <!-- 自动增长 -->
            <generator class="native"></generator>
        </id>
        <property name="name"/>
        <!-- name:实体来中的属性名 (Clazz的名称) clazz:属性类型(clazz的类型是Clazz)-->
        <!-- column:外键列名称 -->
        <!--stu是实体类中set集合的名,sc是表名 , cid是Course在sc表中的外键, -->
        <set name="stu" table="sc">
            <key column="cid"></key>
            <!--set集合当中所存放的对象类型 Student类  sid是Student在sc表中的外键  -->
            <many-to-many class="com.tao.pojo.Student" column="sid"></many-to-many>
        </set>
    </class>

</hibernate-mapping>


//student.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

    <class name="com.tao.pojo.Student" table="student">
        <id name="id">
        <!-- 自动增长 -->
            <generator class="native"></generator>
        </id>
        <!--普通列  -->
        <property name="name"/>
        <property name="gender"/>
        <!-- set集合的配置   sid是Student在sc表中的列名-->
        <set name="cou" table="sc">
        <!-- Student 自己的键 -->
            <key column="sid"></key>
            <!--set的数据库类型    cid是Course在sc表中的外键 -->
            <!--Course的键  -->
            <many-to-many class="com.tao.pojo.Course" column="cid"></many-to-many>
        </set>
    </class>

</hibernate-mapping>


//映射文件hibernate.cfg.xml
<?xml version=‘1.0‘ encoding=‘utf-8‘?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 自动生成表,数据库得手动创建 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test0105_MTM</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- 自动创建或更新表(没有就创建,有就更新 )--> <property name="hbm2ddl.auto">update</property> <!--数据库方言( 如果外键没有生成就把数据库方言设置一下 ) --> <!-- org.hibernate.dialect.MySQL5InnoDBDialect 是 mysql数据库方言的类名 在java文件里巧 MySQL5 选MySQL5InnoDBDialect --> <!-- 如果执行完了没报错,外键还是没有,就把表删了,再执行一次 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <!--配置映射文件 --> <mapping resource="com/tao/pojo/course.hbm.xml"/> <mapping resource="com/tao/pojo/student.hbm.xml"/> </session-factory> </hibernate-configuration> //测试类 //TestJUnit.java package com.tao.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.tao.pojo.Course; import com.tao.pojo.Student; public class TestJUnit { SessionFactory factory ; Session session ; @Before public void test001() { Configuration configure = new Configuration().configure(); factory= configure.buildSessionFactory(); session= factory.openSession(); session.beginTransaction(); } @After public void test002() { session.getTransaction().commit(); session.close(); factory.close(); } @Test public void TestStudent() { } } 测试的时候测试类里不用写内容,这里用TestStudent()测试

 


以上是关于hibernate MTM 联合主键的主要内容,如果未能解决你的问题,请参考以下文章

hibernate 联合主键一对多用注解怎么设置?

Hibernate注解映射联合主键的三种主要方式(转载)

hibernate联合主键 注解方式

hibernate 联合主键

hibernate ——联合主键

hibernate里联合主键composite-id映射,查询单个主键的问题