⒈使用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种常见的情况都好好实际体验了一遍,学到不少知识。
都各有优缺点,在实际设计时,要根据实际需求来选择。
启动数据库:
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种常见的情况都好好实际体验了一遍,学到不少知识。
都各有优缺点,在实际设计时,要根据实际需求来选择。