Hibernate映射关系配置(四)

多对多单向:

Bean:

public class Student implements Serializable {

    private int id ;

    private String name ;

    private Set<Teacher> teachers ;
        ....
}
public class Teacher implements Serializable{

    private int id ;

    private String  name ;
    ....
}

xml:

Student.hbm.xml:
<class name = "Student">
        <!-- id是来配置主键
             name是类中的哪个属性和主键映射
             generator:表示主键的生成策略
        -->
        <id name = "id">
            <generator class="native" />
        </id>
        <!-- property是用来把类中的属性和表的字段做一一对应 -->
        <property name="name" />

        <set name="teachers" table="t_s">
            <!-- key 会在指定的表中新添加列,外键-->
            <key column="sid" />
            <many-to-many class="Teacher" column="tid" />
        </set>

    </class>
Teacher.hbm.xml:
<class name = "Teacher">
        <!-- id是来配置主键
             name是类中的哪个属性和主键映射
             generator:表示主键的生成策略
        -->
        <id name = "id">
            <generator class="native" />
        </id>
        <property name="name" />
    </class>

annotation:

@Entity
public class Student implements Serializable {
        @Id @GeneratedValue
    public int getId() {
        return id;
    }
        /**
     * joinColumns 是指定第三张表中的哪个字段引用当前类对应的表的主键
     * inverseJoinColumns 是指定第三张表中的哪个字段引用关联的另一张表的主键
     * @return
     */
    @ManyToMany
    @JoinTable(name="ts",joinColumns={
            @JoinColumn(name="sid")
    },inverseJoinColumns={
            @JoinColumn(name="tid")
    })
    public Set<Teacher> getTeachers() {
        return teachers;
    }
}

@Entity
public class Teacher implements Serializable{
        @Id @GeneratedValue
    public int getId() {
        return id;
    }
}

多对多双向:

Bean:

public class Student implements Serializable {

    private int id ;

    private String name ;

    private Set<Teacher> teachers ;
        ....
}
public class Teacher implements Serializable{

    private int id ;

    private String  name ;

    private Set<Student> stus ;
        ....
}

Xml:

Student.hbm.xml:
        <class name = "Student">
        <!-- id是来配置主键
             name是类中的哪个属性和主键映射
             generator:表示主键的生成策略
        -->
        <id name = "id">
            <generator class="native" />
        </id>
        <!-- property是用来把类中的属性和表的字段做一一对应 -->
        <property name="name" />

        <set name="teachers" table="t_s">
            <!-- key 会在指定的表中新添加列,外键-->
            <key column="sid" />
            <many-to-many class="Teacher" column="tid" />
        </set>

    </class>

Teacher.hbm.xml:
<class name = "Teacher">
        <!-- id是来配置主键
             name是类中的哪个属性和主键映射
             generator:表示主键的生成策略
        -->
        <id name = "id">
            <generator class="native" />
        </id>
        <property name="name" />

        <set name="stus" table="t_s" cascade="all">
            <key column="tid" />
            <many-to-many column="sid" class="Student" />
        </set>
    </class>

annotation:

@Entity
public class Student implements Serializable {
        @Id @GeneratedValue
    public int getId() {
        return id;
    }
        /**
     * joinColumns 是指定第三张表中的哪个字段引用当前类对应的表的主键
     * inverseJoinColumns 是指定第三张表中的哪个字段引用关联的另一张表的主键
     * @return
     */
    @ManyToMany
    @JoinTable(name="ts",joinColumns={
            @JoinColumn(name="sid")
    },inverseJoinColumns={
            @JoinColumn(name="tid")
    })
    public Set<Teacher> getTeachers() {
        return teachers;
    }
}

@Entity
public class Teacher implements Serializable{
        @Id @GeneratedValue
    public int getId() {
        return id;
    }
        @ManyToMany(mappedBy="teachers")
    public Set<Student> getStus() {
        return stus;
    }
}
时间: 2024-11-05 14:57:23

Hibernate映射关系配置(四)的相关文章

Hibernate映射关系配置

一:多对一(双向关联) Bean: public class Car implements Serializable{ private int id ; private String name ; private User user ; .... } public class User implements Serializable { private int id ; private String name ; private Set<Car> cars ; .... } xml配置: Ca

Hibernate映射关系配置(三)

一对一单向(外键映射): Bean: public class Card implements Serializable{ private int id ; private int num ; private Person person ; .... } public class Person implements Serializable { private int id ; private String name ; .... } Xml: Card.hbm.xml: <class name

Hibernate映射关系配置(二)

二.一对多(单向) Bean: public class Car implements Serializable{ private int id ; private String name ; private User user ; .... } public class User implements Serializable { private int id ; private String name ; private Set<Car> cars ; .... } xml配置: Car.

Hibernate映射关系配置(六)

单向List/Array映射: Bean: public class Car implements Serializable{ private int id ; private String name ; .... } public class User implements Serializable { private int id ; private String name ; private List<Car> cars ; .... } xml: Car.hbm.xml: <cl

Hibernate映射关系配置(五)

多表继承: Bean: public class Person implements Serializable{ private int id ; private String name ; private int age ; } public class Student extends Person implements Serializable { private String dream ; private Date birthday ; } public class Teacher ex

Hibernate映射关系之多对多

1.用户表user和优惠券coupon存在多对多的关系,一个用户可以拥有多个优惠券,一个优惠券可以从属于多个用户. 2.user.java,创建了中间表tb_user_coupon (1)JoinTable表示中间表的 (2) /** * 一个用户可以拥有多个优惠券 但优惠券只有自己的属性,没有用户的引用 单边的一对多关系 */ @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST }) @JoinTable(n

Hibernate映射关系

1.主键相同的一对一关系(商店与商家账户的管理) 两个实体类使用相同的主键,反过来,具有相同主键的尸体被视为一对一的关系.这样就省掉外键关联. 商店类: @Entity @Table(name="tb_store") public class Store { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; /** * 区信息之外的详细商店地址 */ @Column(nullable=false)

Hibernate映射关系之一对多

1.双边使用的比较多,所以这里用双边的一对多:一个商店包含多个优惠券,一个优惠券对应一个商店 Store.java(商店) @OneToMany(mappedBy="store",cascade = {CascadeType.REMOVE }) private Set<Coupon> coupons=new HashSet<Coupon>(); (1)mappedBy="store"是在Coupon类中的Store的变量名称 (2)Casca

《Java从入门到放弃》入门篇:使用注解的方式配置hibernate映射关系

之前我们都是使用配置文件的方式来生成的代码,虽然和JDBC比较简单了很多,但每次都在修改时需要既改实体类又改映射文件.还是有点麻烦. 所以,这一篇,我们来说说使用注解的方式来在接在实体类上配置映射关系. 第一步:新建一个项目,或者把之前项目中的实体类.映射文件,还有hibernate中的mapping标签都删除,然后在DBBrowser中再次生成实体类.如下图: 红框中的选项就表示直接在POJO上以注解的方式加上映射关系.注意括号内的hibernate版本,必须是3.2及以上的才行. 生成后的实