Hibernate得配置介绍!

 0hi猿团提供了移动跨平台开发视频,包括html5,apicloud appcan,dcloud,具体请看http://www.9y.cm  

 Hibernate, 使用连接表的单向关联,多对一的配置!

1. 使用连接表的单向关联(Unidirectional associations with join tables)

. 一对多(one to many)

基于连接表的单向一对多关联 应该优先被采用。请注意,通过指定unique="true",我们可以把多样性从多对多改变为一对多。 

 

<class name="Person">

    <id name="id" column="personId">

        <generator class="native"/>

    </id>

    <set name="addresses" table="PersonAddress">

        <key column="personId"/>

        <many-to-many column="addressId"

            unique="true"

            class="Address"/>

    </set>

</class>

 

<class name="Address">

    <id name="id" column="addressId">

        <generator class="native"/>

    </id>

</class>

create table Person ( personId bigint not null primary key )

create table PersonAddress ( personId not null, addressId bigint not null primary key )

create table Address ( addressId bigint not null primary key )

 

2. 多对一(many to one)

基于连接表的单向多对一关联在关联关系可选的情况下应用也很普遍。 

 

<class name="Person">

    <id name="id" column="personId">

        <generator class="native"/>

    </id>

    <join table="PersonAddress" 

        optional="true">

        <key column="personId" unique="true"/>

        <many-to-one name="address"

            column="addressId" 

            not-null="true"/>

    </join>

</class>

 

<class name="Address">

    <id name="id" column="addressId">

        <generator class="native"/>

    </id>

</class>

create table Person ( personId bigint not null primary key )

create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )

create table Address ( addressId bigint not null primary key )

 

3. 一对一(one to one)

基于连接表的单向一对一关联非常少见,但也是可行的。 

 

<class name="Person">

    <id name="id" column="personId">

        <generator class="native"/>

    </id>

    <join table="PersonAddress" 

        optional="true">

        <key column="personId" 

            unique="true"/>

        <many-to-one name="address"

            column="addressId" 

            not-null="true"

            unique="true"/>

    </join>

</class>

 

<class name="Address">

    <id name="id" column="addressId">

        <generator class="native"/>

    </id>

</class>

create table Person ( personId bigint not null primary key )

create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )

create table Address ( addressId bigint not null primary key )

 

4. 多对多(many to many)

最后,还有 单向多对多关联. 

 

<class name="Person">

    <id name="id" column="personId">

        <generator class="native"/>

    </id>

    <set name="addresses" table="PersonAddress">

        <key column="personId"/>

        <many-to-many column="addressId"

            class="Address"/>

    </set>

</class>

 

<class name="Address">

    <id name="id" column="addressId">

        <generator class="native"/>

    </id>

</class>

create table Person ( personId bigint not null primary key )

create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )

create table Address ( addressId bigint not null primary key )

 

 

单向many-to-one关联是最常见的单向关联关系。 

 

<class name="Person">

    <id name="id" column="personId">

        <generator class="native"/>

    </id>

    <many-to-one name="address" 

        column="addressId"

        not-null="true"/>

</class>

 

<class name="Address">

    <id name="id" column="addressId">

        <generator class="native"/>

    </id>

</class>

create table Person ( personId bigint not null primary key, addressId bigint not null )

create table Address ( addressId bigint not null primary key )

 

5. 一对一(one to one)

基于外键关联的单向一对一关联和单向多对一关联几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束。 

 

<class name="Person">

    <id name="id" column="personId">

        <generator class="native"/>

    </id>

    <many-to-one name="address" 

        column="addressId" 

        unique="true"

        not-null="true"/>

</class>

 

<class name="Address">

    <id name="id" column="addressId">

        <generator class="native"/>

    </id>

</class>

create table Person ( personId bigint not null primary key, addressId bigint not null unique )

create table Address ( addressId bigint not null primary key )

 

基于主键关联的单向一对一关联通常使用一个特定的id生成器。(请注意,在这个例子中我们掉换了关联的方向。) 

 

<class name="Person">

    <id name="id" column="personId">

        <generator class="native"/>

    </id>

</class>

 

<class name="Address">

    <id name="id" column="personId">

        <generator class="foreign">

            <param name="property">person</param>

        </generator>

    </id>

    <one-to-one name="person" constrained="true"/>

</class>

create table Person ( personId bigint not null primary key )

create table Address ( personId bigint not null primary key )

 

6. 一对多(one to many)

基于外键关联的单向一对多关联是一种很少见的情况,并不推荐使用。 

 

<class name="Person">

    <id name="id" column="personId">

        <generator class="native"/>

    </id>

    <set name="addresses">

        <key column="personId" 

            not-null="true"/>

        <one-to-many class="Address"/>

    </set>

</class>

 

<class name="Address">

    <id name="id" column="addressId">

        <generator class="native"/>

    </id>

</class>

create table Person ( personId bigint not null primary key )

create table Address ( addressId bigint not null primary key, personId bigint not null )

 

 

7工具类

HibernateUtils{

 private statituca sessess

 

 

static{

     confifuratuin cfg=

 

  }catch(){

 

  }

 

}

 

public sessionFactory getseesiin(){

 

   return

}

 

 

 

public static session getss

{

 

return facrity.opens  

}

 

 

HibernateUtils{

 

private static sessionFactory;

static{

  Configuraturation cfg = new ConfigUratatuon().configure();

   factory =cfg.buildSessionfactory();

}catch(Exception){

 e.printStackTrace();

}

 

public static SessionFactory getsessionFactory(){

    returen factory;

 

}

 

public static session getsession(){

  return factory.opensession;

}

 

 

public static void closeSession(session session){

  if(session!=null){

  if(session.isopen)

session.close();

 

}

}

 

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhchzh1000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值