您的位置:首页 > 其它

基于外键映射的 一对一关系

2016-10-30 16:13 134 查看
一.



二.代码实现

1.Department

package cn.edu.sdut.hibernate.onetoone;

public class Department {

private int deId;
private String deName;
private Manager mgr;
public int getDeId() {
return deId;
}
public void setDeId(int deId) {
this.deId = deId;
}
public String getDeName() {
return deName;
}
public void setDeName(String deName) {
this.deName = deName;
}
public Manager getMgr() {
return mgr;
}
public void setMgr(Manager mgr) {
this.mgr = mgr;
}

}


2. Manager
package cn.edu.sdut.hibernate.onetoone;

public class Manager {

private int maId;
private String mName;
private Department department;
public int getMaId() {
return maId;
}
public void setMaId(int maId) {
this.maId = maId;
}
public String getmName() {
return mName;
}
public void setmName(String mName) {
this.mName = mName;
}
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}

}
3.Department.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-10-30 14:28:39 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="cn.edu.sdut.hibernate.onetoone.Department" table="DEPARTMENTS">
<id name="deId" type="int">
<column name="DE_ID" />
<generator class="native" />
</id>
<property name="deName" type="java.lang.String">
<column name="DE_NAME" />
</property>
<many-to-one name="mgr" class="cn.edu.sdut.hibernate.onetoone.Manager">
<column name="MA_ID" unique="true"></column>
</many-to-one>
</class>
</hibernate-mapping>


4.Manager.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-10-30 14:28:39 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="cn.edu.sdut.hibernate.onetoone.Manager" table="MANAGERS">
<id name="maId" type="int">
<column name="MA_ID" />
<generator class="native" />
</id>
<property name="mName" type="java.lang.String">
<column name="M_NAME" />
</property>
<one-to-one name="department" class="cn.edu.sdut.hibernate.onetoone.Department"
property-ref="mgr"></one-to-one>
</class>
</hibernate-mapping>
5.DoubleOneToOneTest
package cn.edu.sdut.hibernate.onetoone;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class DoubleOneToOneTest {

private SessionFactory sessionFactory;
private Session session;
private Transaction transaction;

@Before
public void init(){
Configuration configuration = new Configuration().configure();
ServiceRegistry serviceRegistry =
new ServiceRegistryBuilder().applySettings(configuration.getProperties())
.buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
session = sessionFactory.openSession();
transaction = session.beginTransaction();
}
@After
public void destory(){
transaction.commit();
session.close();
sessionFactory.close();
}

@Test
public void testSave(){
Manager manager = new Manager();
manager.setmName("csc");
Department department = new Department();
department.setDeName("AA");
department.setMgr(manager);
manager.setDepartment(department);
//保存的时候先保存1to1的,后保存nto1(设置为unique = true),效率高
session.save(manager);
session.save(department);

}

@Test
public void testGet(){
//get获取的时候不会出现懒加载异常,因为在得到manger的时候会把所有的信息加载出来
Manager manager = (Manager) session.get(Manager.class, 1);
System.out.println(manager.getDepartment().getClass().getName());
}

@Test
public void testDelete(){
//再不设置联级关系的时候不能联级删除
Manager manager = (Manager) session.get(Manager.class, 2);
// Department department = (Department) session.get(Department.class, 1);
// session.delete(department);
session.delete(manager);
}
}
6、hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>

<!-- 配置连接数据库的基本信息 -->
<property name="connection.username">root</property>
<property name="connection.password">csc</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql:///hibernate5</property>

<!-- 配置hibernate的基本信息 -->
<!-- hibernate 所使用的数据库方言 -->
<property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>

<!-- 执行sql时是否在控制台上打印 -->
<property name="show_sql">true</property>

<!-- 是否对sql进行格式化 -->
<property name="format_sql">true</property>

<!-- 指定自动生成数据表的策略 -->
<property name="hbm2ddl.auto">update</property>

<!-- 指定session的delete方法会把对象的id置为null -->
<property name="hibernate.use_identifier_rollback">true</property>

<!-- 指定数据库的隔离级别 -->
<property name="connection.isolation">2</property>

<!-- 配置c3p0数据池 -->
<property name="hibernate.c3p0.max_size">100</property>
<property name="hibernate.c3p0.min_size">20</property>
<property name="hibernate.c3p0.acquire_increment">5</property>
<property name="hibernate.c3p0.timeout">2000</property>
<property name="hibernate.c3p0.idle_test_period">2000</property>
<property name="hibernate.c3p0.max_statements">10</property>

<!-- 设定JDBC的statment读取数据的时候每次在数据库中读取的记录的条数 -->
<property name="hibernate.jdbc.fetch_size">100</property>
<!-- 设定对数据进行批量操作,批次更新和批次插入的批次大小 -->
<property name="hibernate.jdbc.batch_size">30</property>

<!-- 指定关联的xxx.hbm.xml文件 -->
<mapping resource="cn/edu/sdut/hibernate/helloworld/News.hbm.xml"/>
<mapping resource="cn/edu/sdut/hibernate/manytoone/Customer.hbm.xml"/>
<mapping resource="cn/edu/sdut/hibernate/manytoone/Order.hbm.xml"/>

<mapping resource="cn/edu/sdut/hibernate/onetoone/Department.hbm.xml"/>
<mapping resource="cn/edu/sdut/hibernate/onetoone/Manager.hbm.xml"/>
</session-factory>
</hibernate-configuration>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: