Hibernate @OneToMany的mappedBy和@JoinColumn总结

在一对多和多对一双向关联时:

  @OneToMany(cascade=ALL)

  // @JoinColumn(name="s_class") //如果一端设置了@JoinColumn,那么它的name和多端的@joinColumn的name是一样的。

  //但如果设置的是mappedBy的话,那么它的值和多端的getCla的"cla"是一样的。

  public Set<Student> getStudents() {

  return students;

  }

  @ManyToOne

  @JoinColumn(name="s_class")

  public SClass getCla() {

  return cla;

  }

  下面是在一端设置各自属性时输出的SQL语句:

  mappedBy:

  Hibernate: insert into SClass (name) values (?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  @JoinColumn:

  Hibernate: insert into SClass (name) values (?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: update Student set s_class=? where id=?

  Hibernate: update Student set s_class=? where id=?

  我发现mappedBy和@JoinColumn还有一个区别是,在一端设置了@JoinColumn的时候,主控制方在一端,

  也就是在一端set多端的时候,数据库会为你保存级联关系(在多端指向一端的外键设置值了)。

  SClass c=new SClass();

  c.getStudents()。add(s);

  c.getStudents()。add(s1);

  session.save(c);

  这样就行了。但还是建议设置mappedBy让多端设置这种关联比较好。

  两者都不用的时候会为OneToMany新建一个关联表SClass_Student.

  Hibernate: insert into SClass (name) values (?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: insert into Student (s_class, name) values (?, ?)

  Hibernate: insert into SClass_Student (SClass_id, students_id) values (?, ?)

  Hibernate: insert into SClass_Student (SClass_id, students_id) values (?, ?)

 

http://itlab.idcquan.com/Java/Hibernate/963761.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值