Hibernate笔记1

⒈使用Hsqldb注意:
启动数据库:

java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 xdb

在hibernate配置文件中的路径:

jdbc:hsqldb:hsql://localhost/xdb

这句是选择是不是每次都重新建立数据库表:
hibernate.cfg.xml:
<property name="hbm2ddl.auto">create</property>

⒉Hibernate中表之间的关联:
一、多对一(单向):
Project  ------------------------------>  Company

    *                            1
<many-to-one
    name="company"
    column="company_id"
    class="mypack.company"
    cascade="save-update"
    not-null="true">

1) cascade:save-update
保存project时,Hibernate自动保存与project相关的company。

2) 删除company时,如果有project属于company,则因为违反数据库完整性出错。
解决办法:
删除每个company前,先删除所有它的所有project。

二、一对多(单向):
Company  ----------------------------->  Project

    1                                       *

<set
    name="projects"
    cascade="save-update"
    inverse="true">
    <key column="COMPANYID"/>
    <one-to-many class="mypack.Project"/>
</set>
1)key column="COMPANYID"
指set中对象的表中的外键。
2)cascade="save-update"
当保存company时,自动动保存set中的project。
3)可以自由删掉company或project,Hibernate会自动update相关外键。(不删除)

三、一对多(双向):

Company  <------------------------------------------------------------------------->  Project

    1                                                                                            *

<set                                                                                     <many-to-one
    name="projects"                                                                      name="company"
    cascade="all-delete-orphan"                                                      column="COMPNAY"
    inverse="true">                                                                         class="mypack.Company"
                                                                                                   cascade="save-update"
    <key column="COMPANYID"/>                                                 not-null="false"/>
    <one-to-many class="mypack.Project"/>       
</set>
1)在两者中任意一个的mapping文件中加入inverse=true。
2)防御编程。
3)可以自由删除如果cascade为save-update,那么能够自由删除project,但是不能删除company。
同多对一(单向)情况一样。
4)cascade="all-delete-orphan"
*当保存或更新Company对象时,级联保存或更新所有关联的Project对象。相当于save-update。
*当删除Company对象时,级联删除所有关联的Project对象,相当于delete。
*删除不再和Company对象关联的所有Project对象。

四、小结:
把3种常见的情况都好好实际体验了一遍,学到不少知识。
都各有优缺点,在实际设计时,要根据实际需求来选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值