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

        <!-- many-to-one 唯一的创建新的字段的标签
             name是Car中一的一方的属性
             column 表示name对应到表中的外键是什么名字
        -->

        <many-to-one name="person" column="pid" unique="true" cascade="all"/>

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

annotation:

@Entity
public class Card implements Serializable{
        @Id @GeneratedValue
    public int getId() {
        return id;
    }
        @ManyToOne
    @JoinColumn(name="pid",unique=true)
    public Person getPerson() {
        return person;
    }
}

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

一对一双向(外键映射):

Xml:

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

        <!-- many-to-one 唯一的创建新的字段的标签
             name是Car中一的一方的属性
             column 表示name对应到表中的外键是什么名字
        -->

        <many-to-one name="person" column="pid" unique="true" cascade="all" />

    </class>

Person.hbm.xml:

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

        <one-to-one name="card" property-ref="person"/>
    </class>

annotation:

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

        @ManyToOne
    @JoinColumn(name="pid",unique=true)
    public Person getPerson() {
        return person;
    }
}

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

        @OneToOne(mappedBy="person")
    public Card getCard() {
        return card;
    }
}

一对一单向(主键映射):

xml:

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

        <!-- many-to-one 唯一的创建新的字段的标签
             name是Car中一的一方的属性
             column 表示name对应到表中的外键是什么名字
        -->

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

annotation:

public class Card implements Serializable{
        //主键来自Person的主键
        @OneToOne
    @PrimaryKeyJoinColumn
    public Person getPerson() {
        return person;
    }
}

@Entity
public class Person implements Serializable {
        @Id @GeneratedValue
    public int getId() {
        return id;
    }
}
时间: 2024-11-06 02:08:58

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 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.xm

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及以上的才行. 生成后的实