實體之間的關系
關聯,聚合,依賴,組合,繼承
關系的類型:
一對多
多對一
一對一
多對多
學生表和年級表:
1 --學生表 2 create table student( 3 stuno number(4) primary key, 4 name varchar2(20) not null, 5 gradeid number(4) 6 7 ) 8 --年級表 9 create table grade( 10 gradeid number(4) primary key, 11 gradename varchar2(20) not null 12 13 )
當一對多和多對一關系組合就是雙向關聯了
所以整合在一起寫了個添加數據和刪除外鍵表的 級聯代碼
1.建立對象
student:

grade:

2.建立對象之間的關系

3.配置hibernate
1 <!DOCTYPE hibernate-configuration PUBLIC 2 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 4 5 <hibernate-configuration> 6 <session-factory> 7 8 <!-- 指定oracle對應得dialect --> 9 <property name="dialect"> 10 org.hibernate.dialect.Oracle10gDialect 11 </property> 12 <!-- 數據庫jdbc驅動 --> 13 <property name="connection.driver_class"> 14 oracle.jdbc.driver.OracleDriver 15 </property> 16 17 <!-- 數據庫url --> 18 <property name="connection.url"> 19 jdbc:oracle:thin:@localhost:1521:XE 20 </property> 21 22 <!-- 用戶名 --> 23 <property name="connection.username">super_user</property> 24 <!-- 用戶密碼 --> 25 <property name="connection.password">abc123</property> 26 27 <!-- session范圍和上下文 --> 28 <property name="current_session_context_class">thread</property> 29 <!-- 是否在運行期間生成的SQL輸出到日志以供調試 --> 30 <property name="show_sql">true</property> 31 <!-- 是否格式化sql --> 32 <property name="format_sql">true</property> 33 <!-- 根據映射文件自動生成表--> 34 <property name="hbm2ddl.auto">update</property> 35 <!-- 映射 --> 36 <mapping resource="entity/Grade.hbm.xml" /> 37 <mapping resource="entity/Student.hbm.xml" /> 38 39 </session-factory> 40 </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
測試代碼:
1 package dao;
2
3 import org.hibernate.Session;
4 import org.hibernate.SessionFactory;
5 import org.hibernate.Transaction;
6 import org.hibernate.cfg.Configuration;
7
8 import entity.Grade;
9 import entity.Student;
10
11 /**
12 * 多對一關系聯動練習
13 * @author Administrator
14 *
15 */
16 public class StudentDao {
17 //打開配置
18 SessionFactory factory=new Configuration().configure().buildSessionFactory();
19 Session session=null;
20
21 public static void main(String[] args) {
22 StudentDao stu=new StudentDao();
23 try {
24 //stu.update();
25 stu.del();
26 } catch (Exception e) {
27 // TODO Auto-generated catch block
28 e.printStackTrace();
29
30 }
31 }
32 /**
33 * 新增
34 */
35 public void update() throws Exception{
36 session=factory.openSession();
37 session.beginTransaction();
38 //Grade grade=(Grade)session.get(Grade.class, 1);
39
40 Student student=new Student();
41 Grade grade=new Grade();
42 grade.setGradeid(1);
43 grade.setGradename("一年級");
44 session.save(grade);
45 student.setName("小明");
46 student.setGrade(grade);
47 session.save(student);
48 session.getTransaction().commit();
49 System.out.println("成功!");
50
51 session.close();
52 }
53 /**
54 * 刪除
55 */
56 public void del(){
57 session=factory.openSession();
58 session.beginTransaction();
59 //Student student=(Student)session.get(Student.class, 5);
60 //級聯刪除
61 Grade grade=(Grade)session.get(Grade.class, 1);
62 session.delete(grade);
63 //session.delete(student);
64 session.getTransaction().commit();
65 System.out.println("成功!");
66
67 session.close();
68 }
69 }
在代碼中遇到的問題:http://www.cnblogs.com/gcs1995/p/4139422.html