一對多
package cn.pojo; import javax.persistence.*; import java.io.Serializable; import java.util.Set; @Entity //聲明這是一個實體類 必寫 public class District implements Serializable { private static final long serialVersionUID = 8009273978191878070L; //編號 @Id //標識屬性 相當於數據庫中的主鍵 @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "seq_dis") //strategy設置標識的生成策略 @SequenceGenerator(name = "seq_dis",sequenceName = "seq_dis_id", //聲明序列 自動增長唯1 從1開始自增 allocationSize = 1,initialValue = 1) private Integer id; //區縣名稱 @Column(name = "name") //將屬性映射到數據庫中 填寫列名不區分大小寫 private String name; //街道 @OneToMany(cascade = {CascadeType.ALL}) //一對多,不需要指定類型,cascade是為了指定級聯操作。 @JoinColumn(name = "district_Id") //另一個表的外鍵 填寫列名 有了@joincolumn注解 就不能有mappedBy屬性否則會出兼容問題這個跟hibernate版本有關.我的是5 private Set<Street> streetSet; public Set<Street> getStreetSet() { return streetSet; } public void setStreetSet(Set<Street> streetSet) { this.streetSet = streetSet; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public District(Integer id, String name) { this.id = id; this.name = name; } public District(){} }
多對一
package cn.pojo; import javax.persistence.*; import java.io.Serializable; import java.util.Set; @Entity //聲明這是一個實體類 必寫 public class Street implements Serializable { private static final long serialVersionUID = 2465299058773906791L; //編號 @Id //標識屬性 @GeneratedValue(strategy = GenerationType.IDENTITY) //設置生成策略 private Integer id; //街道名稱 @Column(name = "name") //將屬性映射到數據庫中 填寫列名 不區分大小寫 private String name; //所屬區縣 @ManyToOne //多對一 @JoinColumn(name = "district_Id") //指向另一個表的外鍵 填寫列名 private District district; @OneToMany @JoinColumn(name = "street_id") private Set<House> houses; public District getDistrict() { return district; } public void setDistrict(District district) { this.district = district; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Street(){} }
多對多
package entity; import javax.persistence.*; import java.util.Objects; import java.util.Set; @Entity public class EmployeeEntity { private long empid; //員工名 private String empname; //開發過的項目 private Set<ProjectEntity> projects; @ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY) @JoinTable(name = "proemp" //中間表的名字 ,joinColumns ={@JoinColumn(name = "rempid")} //與當前id有關的外鍵 ,inverseJoinColumns = {@JoinColumn(name = "rproid")}) //另一個表有關的外鍵,也就是跟Project public Set<ProjectEntity> getProjects() { return projects; } public void setProjects(Set<ProjectEntity> projects) { this.projects = projects; } @Id public long getEmpid() { return empid; } public void setEmpid(long empid) { this.empid = empid; } @Column(name = "EMPNAME") public String getEmpname() { return empname; } public void setEmpname(String empname) { this.empname = empname; } }
package entity; import javax.persistence.*; import java.util.Objects; import java.util.Set; @Entity public class ProjectEntity { private long proid; //項目名稱 private String proname; //工作人員 private Set<EmployeeEntity> employees; @ManyToMany @JoinTable(name = "proemp" //如上 ,joinColumns ={@JoinColumn(name = "rproid")} //如上 ,inverseJoinColumns = {@JoinColumn(name = "rempid")}) //如上 public Set<EmployeeEntity> getEmployees() { return employees; } public void setEmployees(Set<EmployeeEntity> employees) { this.employees = employees; } @Id @Column(name = "PROID") public long getProid() { return proid; } public void setProid(long proid) { this.proid = proid; } @Column(name = "PRONAME") public String getProname() { return proname; } public void setProname(String proname) { this.proname = proname; } }
多對多測試的時候出現了一個問題如下
An AnnotationConfiguration instance is required to use <mapping class="entity.ProjectEntity"/>
意思是,用了注解了,自然要用注解類生成SessionFactory,剛出現的時候很懵逼,因為說hibernate4以上的版本是不會出現這種問題的,於是找了半天.
最后發現就是這個問題如下
configuration=new AnnotationConfiguration(); //configuration = new Configuration().configure(); 注釋這一段加上 上面一段 下面再多點下configure(); //獲取session對象 sessionFactory =configuration.configure().buildSessionFactory();
因為自動生成的注解是在get上面的所以就沒改了.
使用idea自動生成實體類注解和實體類
沒有hibernate配置點擊加號自動生成一個

第二步

第三步

確保這個連接成功之后第四步

之后會進入如下界面

最后確定即可
