Hibernate 关联映射
2014-12-03 12:00
218 查看
实体之间的关系
关联,聚合,依赖,组合,继承
关系的类型:
一对多
多对一
一对一
多对多
学生表和年级表:
当一对多和多对一关系组合就是双向关联了
所以整合在一起写了个添加数据和删除外键表的 级联代码
1.建立对象
student:
两表的配置文件
3.配置hibernate
上面配置文件中出现了三个新的配置节点,和新的节点属性:
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
测试代码:
在代码中遇到的问题:/article/5714115.html
关联,聚合,依赖,组合,继承
关系的类型:
一对多
多对一
一对一
多对多
学生表和年级表:
--学生表 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
相关文章推荐
- hibernate一对一唯一外键关联映射(单向关联Person----->IdCard)
- hibernate之关于一对一单向,双向关联映射
- Eclipse快速上手Hibernate--8. 关联映射(多对多)
- Hibernate的关联映射
- Hibernate关系映射1:单向N-1关联
- Hibernate关联映射(3) 2016-07-12
- 【SSH进阶之路】Hibernate映射——一对一双向关联映射(六)
- Hibernate 多对多关联映射, 中间表加查询条件
- Hibernate的关联映射(7)-双向1-1关联
- 【SSH进阶之路】Hibernate映射——多对多关联映射(八)
- Hibernate 简单使用(三)一对一关联映射
- Hibernate之一对多关联映射
- hibernate多对多关联映射(单向User--->Role)
- Hibernate之关联映射(上)
- Hibernate高级实体关联映射之多值的实体关联(多对多关联的两种思路之一)
- Hibernate关系映射(二)一对一双向外键关联@OneToOne Annotation方式
- Hibernate关系映射(五)一对多、多对一双向关联@OneToMany @OneToMany Annotation方式
- Hibernate之对象关系映射03一对一单向外键关联
- Hibernate关系映射(1)_一对一单向外键关联