Hibernate 以外键关联
以学生(STUDENT)和身份证(CARD)为例子:
建表语句:
Student:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
? `ID` int(11) NOT NULL auto_increment,
? `Name` varchar(255) default NULL,
? `TeamID` int(11) default NULL,
? PRIMARY KEY? (`ID`),
? KEY `F_Team` (`TeamID`),
? CONSTRAINT `F_Team` FOREIGN KEY (`TeamID`) REFERENCES `team` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=gbk;
?
Card:
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for card
-- ----------------------------
DROP TABLE IF EXISTS `card`;
CREATE TABLE `card` (
? `ID` int(11) NOT NULL auto_increment,
? `Name` varchar(255) default NULL,
? `StudentID` int(11) default NULL,
? PRIMARY KEY? (`ID`),
? KEY `F_Student` (`StudentID`),
? CONSTRAINT `F_Student` FOREIGN KEY (`StudentID`) REFERENCES `student` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=gbk;
配置文件:
Student.hbm.xml
?
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
??? Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
??? <class name="com.vo.Student" table="student" catalog="test" batch-size="3">
??????? <id name="id" type="java.lang.Integer">
??????????? <column name="ID" />
??????????? <generator >
??????????? </generator>
??????? </id>
??????? <property name="name" type="java.lang.String">
??????????? <column name="Name" />
??????? </property>
?????????????? <one-to-one name="cardID" cascade="all" fetch="join"></one-to-one>
??? </class>
</hibernate-mapping>
Card.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
??? Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
??? <class name="com.vo.Card" table="card" catalog="test">
??????? <id name="id" type="java.lang.Integer">
??????????? <column name="ID" />
??????????? <generator />
??????? </id>
??????? <property name="name" type="java.lang.String">
??????????? <column name="Name" />
??????? </property>
??????? <many-to-one name="student" column="StudentID" cascade="all"? constrained="true"></one-to-one>
2.
加上lazy=true,lazy=proxy
card.hbm.xml
<class name="com.vo.Card" table="card" catalog="test" lazy="true">
?
?<many-to-one name="student" column="StudentID" lazy="proxy"></many-to-one>
?
重新运行代码打印:
Hibernate: select student0_.ID as ID1_0_, student0_.Name as Name1_0_ from test.student student0_ where student0_.ID=?