hibernate——onetomany(双向)

来源:互联网 发布:农村淘宝加盟有钱挣吗 编辑:程序博客网 时间:2024/06/08 02:55

hibernate——onetomany(双向)

package com.xueyoucto.xueyou;import org.hibernate.annotations.Cascade;import org.hibernate.annotations.CascadeType;import javax.persistence.*;import java.util.HashSet;import java.util.Set;/** * Created by Administrator on 2016/6/26. */@Entity@Table(name = "h3_maindouble")public class MainDouble {    @Id    @Column(name = "mid")    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;    private String name;    @OneToMany(targetEntity = SubDouble.class,mappedBy = "maindouble")    private Set<SubDouble> subDoubles = new HashSet<SubDouble>();    public Set<SubDouble> getSubDoubles() {        return subDoubles;    }    @OneToMany(targetEntity = SubDouble2.class)    @JoinTable(name = "MainDouble_SubDouble2",joinColumns = @JoinColumn(name = "mid",referencedColumnName = "mid"),            inverseJoinColumns = @JoinColumn(name = "sid2",referencedColumnName = "sid2",unique = true))    private Set<SubDouble2> subDouble2s = new HashSet<SubDouble2>();    public Set<SubDouble2> getSubDouble2s() {        return subDouble2s;    }    public void setSubDouble2s(Set<SubDouble2> subDouble2s) {        this.subDouble2s = subDouble2s;    }    public void setSubDoubles(Set<SubDouble> subDoubles) {        this.subDoubles = subDoubles;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    private int age;}

package com.xueyoucto.xueyou;import javax.persistence.*;/** * Created by Administrator on 2016/6/26. */@Entity@Table(name = "h3_subdouble")public class SubDouble {    @Id    @Column(name = "sid")    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;    private String field1;    private String field2;    @ManyToOne(targetEntity = MainDouble.class)    @JoinColumn(name = "mid",referencedColumnName = "mid",nullable = false)    private MainDouble maindouble;    public MainDouble getMaindouble() {        return maindouble;    }    public void setMaindouble(MainDouble maindouble) {        this.maindouble = maindouble;    }    public SubDouble() {    }    public SubDouble(String field1, String field2) {        this.field1 = field1;        this.field2 = field2;    }    public String getField2() {        return field2;    }    public void setField2(String field2) {        this.field2 = field2;    }    public String getField1() {        return field1;    }    public void setField1(String field1) {        this.field1 = field1;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }}


package com.xueyoucto.xueyou;import javax.persistence.*;/** * Created by Administrator on 2016/6/26. */@Entity@Table(name = "h3_subdouble2")public class SubDouble2 {    @Id    @Column(name = "sid2")    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Integer id;    private String field1;    private String field2;    @ManyToOne(targetEntity = MainDouble.class)    @JoinTable(name = "MainDouble_SubDouble2",joinColumns = @JoinColumn(name = "sid2",referencedColumnName = "sid2",unique = true),    inverseJoinColumns = @JoinColumn(name = "mid",referencedColumnName = "mid"))    private MainDouble mainDouble;    public SubDouble2() {    }    public MainDouble getMainDouble() {        return mainDouble;    }    public void setMainDouble(MainDouble mainDouble) {        this.mainDouble = mainDouble;    }    public SubDouble2(String field1, String field2) {        this.field1 = field1;        this.field2 = field2;    }    public String getField2() {        return field2;    }    public void setField2(String field2) {        this.field2 = field2;    }    public String getField1() {        return field1;    }    public void setField1(String field1) {        this.field1 = field1;    }    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }}

 MainDouble md = new MainDouble();        md.setName("md");        md.setAge(28);        session.persist(md);        SubDouble sd1 = new SubDouble();        sd1.setField1("sd1filed1111");        sd1.setField2("sd2filed2222");        sd1.setMaindouble(md);        session.persist(sd1);        SubDouble sd2 = new SubDouble();        sd2.setField1("sd2filed11111111111");        sd2.setField2("sd2filed222222");        sd2.setMaindouble(md);        SubDouble2 sd3 = new SubDouble2();        sd3.setField1("sd31111111111111");        sd3.setField2("sd32222222222222");        session.persist(sd3);        sd3.setMainDouble(md);        SubDouble2 sd4 = new SubDouble2();        sd4.setField1("sd31111111111111");        sd4.setField2("sd32222222222222");        session.persist(sd4);        sd4.setMainDouble(md);        session.persist(sd2);


运行后,数据库中的表如下图:
h3_maindouble

h3_subdouble

h3_subdouble2

maindouble_subdouble2

这两种方式,@joinColumn是通过外键的方式进行关联,而@joinTable是通过关联表进行关联的。
1 0