其实咱们可以简单的说就是A与B,有关系。
至于他们到底是一对多,多对一,暂且不论。
咱们要讨论的是,如果我存储A,那么数据库里是否会有B;如果我删除A,那么与之相关的B是否也会删除;如果我更新了A,那么B是否会被更新;如果我查询出A,那么B是否也会被查询出来。<property name="hbm2ddl.auto">create</property>实体类情况
@Entity public class Person { private int id; private String name; private Set<Dream> dreams=new HashSet<>(); @Id @GeneratedValue public int getId() { return id; } @Column(name ="myname") public String getName() { return name; } @OneToMany(mappedBy="person") public Set<Dream> getDreams() { return dreams; }//省略部分代码 } @Entity public class Dream { private int id; private String description; private Person person; @Id @GeneratedValue public int getId() { return id; } @ManyToOne @JoinColumn(name="personId") public Person getPerson() { return person; } //省略部分代码 }
public static void main(String[] args) { Person p=new Person(); p.setName("dlf"); Dream d=new Dream(); d.setDescription("marry glt"); d.setPerson(p); SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); session.save(p); session.save(d); session.getTransaction().commit(); }
//代码片2 public static void main(String[] args) { Dream d=new Dream(); d.setDescription("marry glt"); Person p=new Person(); p.setName("dlf"); p.getDreams().add(d); SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionFactory.getCurrentSession(); session.beginTransaction(); session.save(p); session.getTransaction().commit(); }如果,我以"一"的那一方为主,上面的代码会是个什么情况?
我们看api文档
@ManyToOne(cascade={CascadeType.ALL}) @JoinColumn(name="personId") public Person getPerson() { return person; }此时,我们下面的代码,就能正常运行了,而且数据库里,两个对象都存储了,且外键关联也是OK的。
//代码片3 Person p=new Person(); p.setName("dlf"); Dream d=new Dream(); d.setDescription("marry glt"); d.setPerson(p); session.save(d);
@OneToMany(mappedBy="person",cascade={CascadeType.ALL}) public Set<Dream> getDreams() { return dreams; } 测试代码: Dream d=new Dream(); d.setDescription("marry glt"); Person p=new Person(); p.setName("dlf"); p.getDreams().add(d); session.save(p);