您的位置:首页 > 其它

hibernate系列十一:一对一关联配置及案例

2017-11-30 20:41 260 查看
人和身份证是典型的一对一关系

============sql脚本====================

--身份证表
CREATE TABLE Card
(
cardId CHAR(18) PRIMARY KEY,
cardName VARCHAR(50) NOT NULL DEFAULT '中华人民共和国居民身份证',
signOffice VARCHAR(50) NOT NULL,
startDate DATE,
endDate DATE
);
INSERT INTO Card VALUES('432569851458019850',DEFAULT,'长沙市公安局岳麓分局','2007-10-08','2018-10-08');
INSERT INTO Card VALUES('411525698574232985',DEFAULT,'长沙市公安局望城分局','2006-10-08','2020-10-26');
INSERT INTO Card VALUES('400698532578456233',DEFAULT,'长沙市公安局星沙分局','2005-10-08','2017-10-25');
INSERT INTO Card VALUES('254875154963225583',DEFAULT,'长沙市公安局开福区分局','2004-10-08','2016-10-16');
INSERT INTO Card VALUES('365847125652355489',DEFAULT,'长沙市公安局雨花区分局','2003-10-08','2015-10-09');
--公民信息表
CREATE TABLE Person
(
perId INT PRIMARY KEY AUTO_INCREMENT,
perName VARCHAR(20) NOT NULL,
gender CHAR(2) NOT NULL,
nation VARCHAR(20),
birthDay DATE,
address VARCHAR(50),
cardNo CHAR(18),
FOREIGN KEY(cardNo) REFERENCES Card(cardId)
);
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('麻子','男','汉族','1982-04-03','obtk学生宿舍','432569851458019850');
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('刘德华','男','傣族','1981-08-08','obtk学生宿舍','411525698574232985');
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('周星驰','男','瑶族','1976-11-11','obtk学生宿舍','400698532578456233');
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('范冰冰','女','苗族','1985-09-11','obtk学生宿舍','254875154963225583');
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('刘亦菲','女','侗族','1986-05-04','obtk学生宿舍','365847125652355489');

==============实体类CardEntity.java========================

package com.obtk.entitys;

import java.io.Serializable;

public class CardEntity implements Serializable {
private String cardId;
private String cardName;
private String signOffice;
private String startDate;
private String endDate;
private PersonEntity per;//关联属性

public CardEntity() {
}

public CardEntity(String cardId, String cardName, String signOffice,
String startDate, String endDate) {
super();
this.cardId = cardId;
this.cardName = cardName;
this.signOffice = signOffice;
this.startDate = startDate;
this.endDate = endDate;
}

public void setPer(PersonEntity per) {
this.per = per;
}

public PersonEntity getPer() {
return per;
}

public String getCardId() {
return cardId;
}
public void setCardId(String cardId) {
this.cardId = cardId;
}
public String getCardName() {
return cardName;
}
public void setCardName(String cardName) {
this.cardName = cardName;
}
public String getSignOffice() {
return signOffice;
}
public void setSignOffice(String signOffice) {
this.signOffice = signOffice;
}
public String getStartDate() {
return startDate;
}
public void setStartDate(String startDate) {
this.startDate = startDate;
}
public String getEndDate() {
return endDate;
}
public void setEndDate(String endDate) {
this.endDate = endDate;
}

}

==============实体类PersonEntity.java========================

package com.obtk.entitys;

import java.io.Serializable;

public class PersonEntity implements Serializable{
private static final long serialVersionUID = -9133691278588045990L;

private int perId;
private String perName;
private String gender;
private String nation;
private String birthDay;
private String address;
private CardEntity card;  //关联属性

public PersonEntity() {
}

public PersonEntity(String perName, String gender, String nation,
String birthDay, String address) {
super();
this.perName = perName;
this.gender = gender;
this.nation = nation;
this.birthDay = birthDay;
this.address = address;
}

public void setCard(CardEntity card) {
this.card = card;
}

public CardEntity getCard() {
return card;
}

public int getPerId() {
return perId;
}
public void setPerId(int perId) {
this.perId = perId;
}
public String getPerName() {
return perName;
}
public void setPerName(String perName) {
this.perName = perName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getNation() {
return nation;
}
public void setNation(String nation) {
this.nation = nation;
}
public String getBirthDay() {
return birthDay;
}
public void setBirthDay(String birthDay) {
this.birthDay = birthDay;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}

}

=======================映射文件PersonEntity.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">
<hibernate-mapping>
<class name="com.obtk.entitys.PersonEntity" table="Person">
<id name="perId" type="integer">
<column name="perId"></column>
<generator class="native"></generator>
</id>
<property name="perName" type="string">
<column name="perName"></column>
</property>
<property name="gender" type="string">
<column name="gender"></column>
</property>
<property name="nation" type="string">
<column name="nation"></column>
</property>
<property name="address" type="string">
<column name="address"></column>
</property>
<property name="birthDay" type="string">
<column name="birthDay"></column>
</property>
<!—column是外键,unique是唯一,cascade是级联属性—->
<many-to-one name="card" class="com.obtk.entitys.CardEntity"
column="cardNo"
unique="true"
cascade="all">
</many-to-one>
</class>
</hibernate-mapping>

==================映射文件CardEntity.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">
<hibernate-mapping>
<class name="com.obtk.entitys.CardEntity" table="Card">
<id name="cardId" type="string">
<column name="cardId"></column>
<generator class="assigned"></generator>
</id>
<property name="cardName" type="string">
<column name="cardName"></column>
</property>
<property name="startDate" type="string">
<column name="startDate"></column>
</property>
<property name="endDate" type="string">
<column name="endDate"></column>
</property>
<property name="signOffice" type="string">
<column name="signOffice"></column>
</property>
<!-- property-ref="card"表示外键表的关联属性 -->
<one-to-one name="per" class="com.obtk.entitys.PersonEntity"
property-ref="card"
cascade="all"
></one-to-one>
</class>
</hibernate-mapping>

案例一  数据添加

package com.obtk.test;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.obtk.entitys.CardEntity;
import com.obtk.entitys.PersonEntity;
import com.obtk.utils.HibernateUtil;

public class TestAdd {
public static void main(String[] args) {
Session session=null;
Transaction tx=null;
try {
//获得数据库链接
session=HibernateUtil.getSession();
tx=session.beginTransaction();
CardEntity card=new CardEntity("254586995425635415", "中华人民共和国居民身份证",
"长沙市望城区哦不塔克分局", "2010-11-11", "2030-11-11");
PersonEntity per=new PersonEntity("小明", "男", "布依族", "2002-11-11", "学生宿舍");
card.setPer(per);
per.setCard(card);
session.save(per);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtil.closeSession();
}
}
}

案例二  数据删除

package com.obtk.test;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.obtk.entitys.CardEntity;
import com.obtk.utils.HibernateUtil;

public class TestDel {
public static void main(String[] args) {
Session session=null;
Transaction tx=null;
try {
//获得数据库链接
session=HibernateUtil.getSession();
tx=session.beginTransaction();
CardEntity card=(CardEntity)session.get(CardEntity.class, "254586995425635415");
session.delete(card);
tx.commit();
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateUtil.closeSession();
}
}
}

案例三  关联查询

package com.obtk.test;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import com.obtk.entitys.PersonEntity;
import com.obtk.utils.HibernateUtil;

public class TestJoin01 {
public static void main(String[] args) {
Session session=null;
try {
//获得数据库链接
session=HibernateUtil.getSession();
PersonEntity per=(PersonEntity)session.get(PersonEntity.class, 7);
System.out.println(per.getPerName()+","+per.getGender()
+","+per.getCard().getCardId()+","+per.getCard().getSignOffice());
} catch (HibernateException e) {
e.printStackTrace();
}finally{
HibernateUtil.closeSession();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: