• Hibernate 一对多注解 mappedby 作用


      1 package oneToMany; 
      2 import java.util.Set; 
      3 import javax.persistence.*; 
      4 /* 
      5 注意导入时,是导入:import javax.persistence.*;    
      6 非导入org.hibernate的相关类:import org.hibernate.annotations.Entity; 
      7 */ 
      8 @Entity 
      9 @Table(name="classes") 
     10 public class Classes implements Serializable { 
     11   @Id 
     12   @GeneratedValue(strategy=GenerationType.AUTO) 
     13   private int id; 
     14   private String name; 
     15     
     16   @OneToMany(cascade=CascadeType.ALL,mappedBy="classes")    
     17   private Set<Student> students; 
     18 //getter,setter省略 
     19 } 
     20 
     21 
     22 package oneToMany; 
     23 import javax.persistence.*; 
     24 @Entity 
     25 @Table(name="student") 
     26 public class Student implements Serializable  { 
     27   @Id 
     28   @GeneratedValue(strategy=GenerationType.AUTO) 
     29   private int sid; 
     30     
     31   private String sname; 
     32     
     33   //若有多个cascade,可以是:{CascadeType.PERSIST,CascadeType.MERGE} 
     34   @ManyToOne(cascade={CascadeType.ALL})         
     35   @JoinColumn(name="classid")     //student类中对应外键的属性:classid 
     36   private Classes classes; 
     37 //getter,setter省略 
     38 } 
     39 
     40 
     41 public class TestOneToMany { 
     42 /* 
     43 CREATE TABLE    student (    --要定义外键!!!!!!! 
     44     `sid` double NOT NULL auto_increment, 
     45     `classid` double NULL, 
     46     `sname` varchar(255) NOT NULL, 
     47     PRIMARY KEY    (sid), 
     48     INDEX par_ind (classid), 
     49     FOREIGN KEY (classid) REFERENCES classes(id) ON DELETE CASCADE ON UPDATE CASCADE 
     50 ) ENGINE=InnoDB 
     51 */    
     52   public static void main(String[] args) throws SQLException    
     53   { 
     54     try 
     55     { 
     56       SessionFactory sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
     57       Session session=sf.openSession(); 
     58       Transaction tx=session.beginTransaction();         
     59 /*
     60 因为mappedBy是定义在classes中,即classes类不负责维护级联关系.即维护者是student.所以,
     61 1.要将clsses的数据,赋给student,即用student的setClasses()方法去捆定class数据;
     62 2.在进行数据插入/更新session.save()/session.update()时,最后操作的是student.
     63 */
     64       Classes classes=new Classes(); 
     65       classes.setName("access"); 
     66         
     67       Student st1=new Student(); 
     68       st1.setSname("jason"); 
     69       st1.setClasses(classes); 
     70       session.save(st1); 
     71         
     72       Student st2=new Student(); 
     73       st2.setSname("hwj"); 
     74       st2.setClasses(classes); 
     75       session.save(st2); 
     76       tx.commit();
     77 /* 
     78 输出如下:
     79 Hibernate: insert into classes (name) values (?)
     80 Hibernate: insert into student (classid, sname) values (?, ?)
     81 Hibernate: insert into student (classid, sname) values (?, ?)
     82 */
     83 /*
     84 因为一端维护关系另一端不维护关系的原因,我们必须注意避免在应用中用不维护关系的类(class)建立关系,因为这样建立的关系是不会在数据库中存储的。
     85 如上的代码倒过来,则插入时,student的外键值为空.如下:
     86 */
     87 //      Student st1=new Student(); 
     88 //      st1.setSname("jason"); 
     89 //      session.save(st1); 
     90 //        
     91 //      Student st2=new Student(); 
     92 //      st2.setSname("hwj"); 
     93 //      session.save(st2); 
     94 //        
     95 //      Set<Student> students=new HashSet<Student>(); 
     96 //      students.add(st1); 
     97 //      students.add(st2); 
     98 //        
     99 //      Classes classes=new Classes(); 
    100 //      classes.setName("access"); 
    101 //      classes.setStudents(students); 
    102 //      session.save(classes); 
    103 /*
    104 输出如下:
    105 Hibernate: insert into student (classid, sname) values (?, ?)
    106 Hibernate: insert into student (classid, sname) values (?, ?)
    107 Hibernate: insert into classes (name) values (?)
    108 */
    109     } 
    110     catch(HibernateException e) 
    111     { 
    112       e.printStackTrace();        
    113     } 
    114   } 
    115 }
  • 相关阅读:
    .NET互操作技术杂谈
    VS2008 Remote Debug HOW TO
    Entity Framework一对多关系或一对一关系删除子对象的方法
    Associations in EF Code First: Part 1 – Introduction and Basic Concepts
    如何管理Entity Framework中得事务
    在asp.net mvc3中编译视图文件
    entity framework中对关系使用默认规则与配置
    使用Entity Framework时动态生成lamda表达式
    asp.net mvc 身份验证中返回绝对路径的ReturnUrl
    Entity Framework 事务处理SaveChanges(false)
  • 原文地址:https://www.cnblogs.com/quchengfeng/p/4110754.html
Copyright © 2020-2023  润新知