一对多

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 = ,initialValue = )
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配置点击加号自动生成一个

第二步

第三步

确保这个连接成功之后第四步

之后会进入如下界面

最后确定即可

idea中注解配置一对多,多对一,双向多对一映射(不详细)的更多相关文章

  1. Hibernate中用注解配置一对多双向关联和多对一单向关联

    Hibernate中用注解配置一对多双向关联和多对一单向关联 Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射.在Hibernate3.3之前,需单独下载注解 ...

  2. Hibernate关联关系配置(一对多、一对一和多对多)

    第一种关联关系:一对多(多对一) "一对多"是最普遍的映射关系,简单来讲就如消费者与订单的关系. 一对多:从消费者角的度来说一个消费者可以有多个订单,即为一对多. 多对一:从订单的 ...

  3. Hibernate笔记——关联关系配置(一对多、一对一和多对多)

    原文:http://www.cnblogs.com/otomedaybreak/archive/2012/01/20/2327695.html ============================ ...

  4. Windows中Nginx配置nginx.conf不生效解决方法(路径映射)

    Windows中Nginx配置nginx.conf不生效解决方法 今天在做Nginx项目的时候,要处理一个路径映射问题, location /evaluate/ { proxy_pass http:/ ...

  5. hibernate(jpa)中注解配置字段为主键

    http://www.blogjava.net/ITdavid/archive/2009/02/25/256605.html 注解方式的主键配置     非自增字段为主键,注解annotation表示 ...

  6. Hibernate一对多单向(双向)关联映射

    (1).编写配置文件 Hibernate通过读写默认的XML配置文件hibernate.cfg.xml加载数据库配置信息.代码如下: <hibernate-configuration> & ...

  7. 8、双向一对多的关联关系(等同于双向多对一。1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用)

    双向一对多关联关系 “双向一对多关联关系”等同于“双向多对一关联关系”:1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用. 还是用客户Customer和订单Order来解释: “一对多 ...

  8. Hibernate 配置双向多对多关联

    本文解决问题:Hibernate 中配置项目(Project) 员工(Employee)   双向多对多关联 方案一:直接配置双向多对多 方案二:配置第三个关联类(xml)   将多对多查分开来(形成 ...

  9. Servlet生命周期和注解配置

    Servlet的生命周期和注解配置问题 /* Servlet? 运行在服务器上的小程序 定义浏览器访问到Tomcat的规则 一.生命周期? 1.创建 2.提供服务 3.被销毁 二.servlet3.0 ...

随机推荐

  1. 【数据库】9.0 MySQL入门学习(九)——获得数据库和表的信息、日期计算、查询、选择特殊列

    1.0 SELECT语句用来从数据表中检索信息. SELECT what_to_select FROM which_table WHERE conditions_to_satisfy; what_to ...

  2. ref 和 out 的区别

    ref和out都是C#中的关键字,所实现的功能也差不多,都是指定一个参数按照引用传递. 对于编译后的程序而言,它们之间没有任何区别,也就是说它们只有语法区别. 总结起来,他们有如下语法区别: 1.re ...

  3. SharePoint2010 HTTP Error 503. The service is unavailable 解决方法

    1.更改系统管理员用户密码前提 因为更改系管理员用户密码会影响到 "SharePoint2010"正常运行,所在尽量不要更改系统管理员用户的密码, 必须更改密码的话,需要注意以两点 ...

  4. 数据质量控制软件Q-CHECKER(转)

    随着企业信息化建设的不断深入进行,我们的企业将逐步地发展成为数字化企业.其中作为最基本构成的CATIA数模已经是产品开发制造的唯一依据,CATIA数模的质量就是加工的质量,就是制造的质量,就是生产出的 ...

  5. koa2获取用户ip

    调用下面方法即可获取 // koa2 中 req 为 ctx.req const getUserIp = (req) => { return req.headers['x-forwarded-f ...

  6. Struts2学习-拦截器2

    1.做一个登陆页面(loginView.jsp,才用Action来访问),2.登陆成功后,可以跳转到系统的首页(index.jsp),3.首页有一个链接(testOtherAction访问其它的功能模 ...

  7. April 2 2017 Week 14 Sunday

    You only live once, but if you do it right, once is enough. 人生只有一次,但如果活对了,一次也就够了. Maybe I am going t ...

  8. zt dup() 和 dup2()

    dup() 和 dup2() 2011-10-07 11:06:31|  分类: Linux学习心得 |字号 订阅   dup和dup2都可用来复制一个现存的文件描述符,使两个文件描述符指向同一个fi ...

  9. 日期的压缩存储daybits

    问题: 存储一个日期的序列,例如保存用户一年的登录时间序列,20140201,20130102这样两个日期,如果用INT那么需要八个字节,用STRING就更多了. 解决: 通过bit来存储一天,具体的 ...

  10. appendChild与Transition动画

    在createElement之后,直接把这个div append到body中,是不会触发css3 transition动画的 必须要让浏览器计算div的css属性后,然后再设置div的style,才会 ...