天天看点

Hibernate 一对一关系(基于XML)

场景: 当一个实体跟另一个实体存在一对一关系时,就可以用hibernate的one-to-one mapping来处理啦。

本教程将会讲解如何用hibernate来解决两个存在1对1关联关系的表之间的级联save问题。

本教程用到的开发工具和技术:

1. Hibernate 3.6.3.Final

2. Oracle 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

3. Apache Maven 3.3.3

4. Eclipse Mars Release (4.5.0)

项目结构:

[img]http://dl2.iteye.com/upload/attachment/0122/8580/8cab1eab-9f6a-36b6-8f46-d7b0b5afaa4d.png[/img]

项目依赖:

pom.xml 文件

1. “One-to-one” 表关联

一对一关系的表设计是指,一个STOCK表中有且仅有一条STOCK_DETAIL记录与其对应, 两个表中都有同样的STOCK_ID作为主健,在STOCK_DETAIL表中STOCK_ID既是主健,同时也作为外键关联到STOCK表的STOCK_ID字段。这就是常见的一对一的表结构设计。

[img]http://dl2.iteye.com/upload/attachment/0122/8584/0395e241-3b62-33d5-b83e-a3f02132bd7c.png[/img]

建表语句:

2. Hibernate的model类

创建两个entity类来对应上面的两张表,分别是Stock.java 和StockDetail.java.

Stock.java 文件:

StockDetail.java

3. Hibernate的mapping文件

创建两个对应的hbm文件,Stock.hbm.xml和StockDetail.hbm.xml

Stock.hbm.xml文件:

StockDetail.hbm.xml 文件:

PS:由于STOCK_DETAIL的的主键和STOCK表示一样的,所以在StockDetail.hbm.xml文件中通过指定generator=foreign来实现表明Stock_detail的主键的由来,并通过指定constrained="true"来限制Stock表的主健一定要存在。

4. Hibernate 的配置文件

将Stock.hbm.xml和StockDetail.hbm.xml配置到Hibernate.cfg.xml文件中。

Hibernate.cfg.xml 文件:

5. 运行

输出结果:

[quote]

Maven + Hibernate One-to-One example + Oracle

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

SLF4J: Defaulting to no-operation (NOP) logger implementation

SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

Hibernate: select max(STOCK_ID) from RMMDBA.STOCK

Hibernate: insert into RMMDBA.STOCK (STOCK_CODE, STOCK_NAME, STOCK_ID) values (?, ?, ?)

Hibernate: insert into RMMDBA.STOCK_DETAIL (COMP_NAME, COMP_DESC, REMARK, LISTED_DATE, STOCK_ID) values (?, ?, ?, ?, ?)

Done

[/quote]

项目下载链接:

http://dl.iteye.com/topics/download/f244e58d-a147-36c5-a23f-4a0cd32c79b0

继续阅读