您的位置:首页 > 其它

Hibernate 关联映射

2014-12-03 12:00 218 查看
实体之间的关系
  关联,聚合,依赖,组合,继承

关系的类型:
  一对多
  多对一
  一对一
  多对多

  学生表和年级表:

--学生表
create table student(
stuno number(4) primary key,
name varchar2(20) not null,
gradeid number(4)

)
--年级表
create table grade(
gradeid number(4) primary key,
gradename varchar2(20) not null

)


当一对多和多对一关系组合就是双向关联了

  所以整合在一起写了个添加数据和删除外键表的 级联代码

  1.建立对象

    student:    

<!--grade表-->
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping
package="entity">

<class name="Grade" table="grade" dynamic-update="true">
<id name="gradeid" type="integer">
<generator class="assigned">

</generator>
</id>
<property name="gradename" type="java.lang.String" />
<set name="stu" cascade="all">
<key column="gradeid"/>
<one-to-many class="Student"/>
</set>

</class>
</hibernate-mapping>

<!--student表-->
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping
package="entity">

<class name="Student" table="student" dynamic-update="true">
<id name="stuno" type="integer">
<generator class="sequence">
<param name="sequence">seq_student</param>
</generator>
</id>
<property name="name" type="java.lang.String" />

<!-- 多对一关系 -->
<many-to-one name="grade" class="Grade">
<column name="gradeid"></column>
</many-to-one>
</class>
</hibernate-mapping>


两表的配置文件
  3.配置hibernate

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

<!-- 指定oracle对应得dialect -->
<property name="dialect">
org.hibernate.dialect.Oracle10gDialect
</property>
<!-- 数据库jdbc驱动 -->
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>

<!-- 数据库url -->
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:XE
</property>

<!-- 用户名 -->
<property name="connection.username">super_user</property>
<!-- 用户密码 -->
<property name="connection.password">abc123</property>

<!-- session范围和上下文 -->
<property name="current_session_context_class">thread</property>
<!-- 是否在运行期间生成的SQL输出到日志以供调试 -->
<property name="show_sql">true</property>
<!-- 是否格式化sql -->
<property name="format_sql">true</property>
<!-- 根据映射文件自动生成表-->
<property name="hbm2ddl.auto">update</property>
<!-- 映射 -->
<mapping resource="entity/Grade.hbm.xml" />
<mapping resource="entity/Student.hbm.xml" />

</session-factory>
</hibernate-configuration>


  上面配置文件中出现了三个新的配置节点,和新的节点属性:

   1.<set name="stu" cascade="all"> --name指定对象中属性名 cascade:级联 ————》all/none/save-update/delete/都是字面意思

    <key column="gradeid"/>    --指定两个对象关联的主键
    <one-to-many class="Student"/>  --这里是个一对多关系的实体类配置 ,因为我在mapping中配置了package所以这里只写类名
   </set>

   2.<many-to-one name="grade" class="Grade"> --指定对象中处于“一”关系的属性名,并且指明类名

    <column name="gradeid"></column>    --制定关联的主键
    </many-to-one>

   3.<property name="hbm2ddl.auto">update</property> --指定操作类型

      #hibernate.hbm2ddl.auto create-drop
      #hibernate.hbm2ddl.auto create
      #hibernate.hbm2ddl.auto update
      #hibernate.hbm2ddl.auto validate

  

  测试代码:

    

package dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import entity.Grade;
import entity.Student;

/**
* 多对一关系联动练习
* @author Administrator
*
*/
public class StudentDao {
//打开配置
SessionFactory factory=new Configuration().configure().buildSessionFactory();
Session session=null;

public static void main(String[] args) {
StudentDao stu=new StudentDao();
try {
//stu.update();
stu.del();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
}
/**
* 新增
*/
public void update() throws Exception{
session=factory.openSession();
session.beginTransaction();
//Grade grade=(Grade)session.get(Grade.class, 1);

Student student=new Student();
Grade grade=new Grade();
grade.setGradeid(1);
grade.setGradename("一年级");
session.save(grade);
student.setName("小明");
student.setGrade(grade);
session.save(student);
session.getTransaction().commit();
System.out.println("成功!");

session.close();
}
/**
* 删除
*/
public void del(){
session=factory.openSession();
session.beginTransaction();
//Student student=(Student)session.get(Student.class, 5);
//级联删除
Grade grade=(Grade)session.get(Grade.class, 1);
session.delete(grade);
//session.delete(student);
session.getTransaction().commit();
System.out.println("成功!");

session.close();
}
}


   在代码中遇到的问题:/article/5714115.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: