Hibernate4关系映射总结
来源:互联网 发布:pkpm软件 编辑:程序博客网 时间:2024/06/04 09:12
--------------------------------------------无表关联双向1-N--------------------------------------------
User 1少的一端,Order N多的一端
--------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
//mappedBy="person"属性表明该Person实体不控制关联关系
@OneToMany(targetEntity=Order.class,mappedBy="user") //定义user实体关联的Order实体
private Set<Order> orders = new HashSet<>();
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
//定义Order实体关联的User实体
@ManyToOne(targetEntity=User.class)
@JoinColumn(name="user_id",referencedColumnName="id",nullable=false)
@Cascade(CascadeType.ALL) //级联策略 所有持久化都级联到关联的实体 总有级联操作都在order控制
private User user;
-------------------------------------无表关联的单项N-1-----------------------------------------------
---------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
@ManyToOne(targetEntity=User.class) //定义order实体关联的user实体
@JoinColumn(name="user_id",nullable=false) //映射外键关联。指定外键列的列名是user_id
@Cascade(CascadeType.ALL) //级联策略 所有持久化都级联到关联的实体(级联关系控制在Order) 执行的sql语句或最后出现 update user 查看user实体是否存在
private User user;
-------------------------------------有表关联的单项N-1-----------------------------------------------产生中间表(order_user)连接user和order
---------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
@ManyToOne(targetEntity=User.class) //定义Order实体关联的User实体
@JoinTable(name="order_user",//指定连接表的表名为order_user(连接表指的是中间表)
//指定连接表中的order_id为外键(存在于中间表),参照到实体对应表的主键列 (id是t_order表的主键列)
joinColumns=@JoinColumn(name="order_id",referencedColumnName="id",unique=true),
//指定连接表中的user_id外键列(存在于中间表),参照到当前实体的关联实体对应表的主键列(id是t_user表的主键列)
inverseJoinColumns=@JoinColumn(name="user_id",referencedColumnName="id"))
private User user;
-------------------------------------(无连接表的单项1-N关联)-----------------------------------------------
无连接表的单项1-N关联,因为1的一端需要访问N的一端,而且N的一端将以集合Set形式表示
* 程序是需要在N的一端增加一个外键列来维护关系,因为是由1的一端来控制关联关系,因此直接在1的一端用@JoinColumn修饰Set集合映射外键列即可
---------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
/*
* 1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。
2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。
* */
@OneToMany(targetEntity=Order.class,fetch=FetchType.EAGER) //定义User实体关联的Order实体
@JoinColumn(name="user_id",referencedColumnName="id") //映射外键关联。指定外键列的列名是user_id
private Set<Order> order;
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
----------test
User user = new User();
user.setUsername("dt");
user.setPassword("123");
user.setEmail("dskdks@qq.com");
user.setSex(2);
userService.saveUser(user);
Order order = new Order();
order.setCtimes("2016-06-11");
order.setOrderName("商品3");
orderService.saveOrder(order);
-------------------------------------无连接表的双向项1-N关联-----------------------------------------------
---------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
/*
* 1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。
2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。
* */
@OneToMany(targetEntity=Order.class,mappedBy="user",cascade = {CascadeType.PERSIST, CascadeType.MERGE},fetch=FetchType.EAGER) //定义User实体关联的Order实体
private Set<Order> order= new HashSet<>();
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
@ManyToOne(targetEntity=User.class)
@JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
private User user;
---------test
User user =new User();
user.setUsername("ee");
user.setPassword("123");
user.setEmail("dskdks@qq.com");
user.setSex(2);
userService.saveUser(user);
Order order = new Order();
order.setCtimes("2016-06-11");
order.setOrderName("商品21");
order.setUser(user);
orderService.saveOrder(order);
Order order2 = new Order();
order2.setCtimes("2016-06-11");
order2.setOrderName("商品21");
order2.setUser(user);
orderService.saveOrder(order2);
User 1少的一端,Order N多的一端
--------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
//mappedBy="person"属性表明该Person实体不控制关联关系
@OneToMany(targetEntity=Order.class,mappedBy="user") //定义user实体关联的Order实体
private Set<Order> orders = new HashSet<>();
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
//定义Order实体关联的User实体
@ManyToOne(targetEntity=User.class)
@JoinColumn(name="user_id",referencedColumnName="id",nullable=false)
@Cascade(CascadeType.ALL) //级联策略 所有持久化都级联到关联的实体 总有级联操作都在order控制
private User user;
-------------------------------------无表关联的单项N-1-----------------------------------------------
---------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
@ManyToOne(targetEntity=User.class) //定义order实体关联的user实体
@JoinColumn(name="user_id",nullable=false) //映射外键关联。指定外键列的列名是user_id
@Cascade(CascadeType.ALL) //级联策略 所有持久化都级联到关联的实体(级联关系控制在Order) 执行的sql语句或最后出现 update user 查看user实体是否存在
private User user;
-------------------------------------有表关联的单项N-1-----------------------------------------------产生中间表(order_user)连接user和order
---------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
@ManyToOne(targetEntity=User.class) //定义Order实体关联的User实体
@JoinTable(name="order_user",//指定连接表的表名为order_user(连接表指的是中间表)
//指定连接表中的order_id为外键(存在于中间表),参照到实体对应表的主键列 (id是t_order表的主键列)
joinColumns=@JoinColumn(name="order_id",referencedColumnName="id",unique=true),
//指定连接表中的user_id外键列(存在于中间表),参照到当前实体的关联实体对应表的主键列(id是t_user表的主键列)
inverseJoinColumns=@JoinColumn(name="user_id",referencedColumnName="id"))
private User user;
-------------------------------------(无连接表的单项1-N关联)-----------------------------------------------
无连接表的单项1-N关联,因为1的一端需要访问N的一端,而且N的一端将以集合Set形式表示
* 程序是需要在N的一端增加一个外键列来维护关系,因为是由1的一端来控制关联关系,因此直接在1的一端用@JoinColumn修饰Set集合映射外键列即可
---------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
/*
* 1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。
2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。
* */
@OneToMany(targetEntity=Order.class,fetch=FetchType.EAGER) //定义User实体关联的Order实体
@JoinColumn(name="user_id",referencedColumnName="id") //映射外键关联。指定外键列的列名是user_id
private Set<Order> order;
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
----------test
User user = new User();
user.setUsername("dt");
user.setPassword("123");
user.setEmail("dskdks@qq.com");
user.setSex(2);
userService.saveUser(user);
Order order = new Order();
order.setCtimes("2016-06-11");
order.setOrderName("商品3");
orderService.saveOrder(order);
-------------------------------------无连接表的双向项1-N关联-----------------------------------------------
---------User实体类
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String username;
private String password;
private String email;
private Integer sex;
/*
* 1、FetchType.LAZY:懒加载,加载一个实体时,定义懒加载的属性不会马上从数据库中加载。
2、FetchType.EAGER:急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。
* */
@OneToMany(targetEntity=Order.class,mappedBy="user",cascade = {CascadeType.PERSIST, CascadeType.MERGE},fetch=FetchType.EAGER) //定义User实体关联的Order实体
private Set<Order> order= new HashSet<>();
---------Order实体类
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String orderName;
private String ctimes;
@ManyToOne(targetEntity=User.class)
@JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
private User user;
---------test
User user =new User();
user.setUsername("ee");
user.setPassword("123");
user.setEmail("dskdks@qq.com");
user.setSex(2);
userService.saveUser(user);
Order order = new Order();
order.setCtimes("2016-06-11");
order.setOrderName("商品21");
order.setUser(user);
orderService.saveOrder(order);
Order order2 = new Order();
order2.setCtimes("2016-06-11");
order2.setOrderName("商品21");
order2.setUser(user);
orderService.saveOrder(order2);
0 0
- Hibernate4关系映射总结
- Hibernate4一对多关系映射
- Hibernate4-8 映射继承关系
- Hibernate4使用注解关系映射
- Hibernate4教程四:关系映射
- Hibernate4学习总结(2)--配置形式的集合映射,关联关系映射
- Hibernate4学习总结(4)--注解形式的集合映射,关联关系映射
- Hibernate4实战 之 第四部分:关系映射
- Hibernate4实战 之 第四部分:关系映射
- Hibernate4实战 之 第四部分:关系映射
- Hibernate4实战 之 第四部分:关系映射
- Hibernate4实战 之 第四部分:关系映射
- Hibernate4实战 之 第四部分:关系映射
- hibernate4实战4—映射关系
- Hibernate4实战 之 第四部分:关系映射
- Hibernate4使用注解关系映射说明
- Hibernate4多对多关系映射
- Hibernate4实战 之 第四部分:关系映射
- 计蒜客大赛第4场
- Java---俄罗斯方块小游戏
- 第14周项目1-排序函数模板
- 解决wampserver server offline
- 排序算法基础篇之宏观理论
- Hibernate4关系映射总结
- 第九周项目2—我的数组类
- Class.forName()用法详解
- 1358 Period
- $("button").click(function () { 与 $(":button").click(function () { window.onblur window.onfocus
- ACdream 1216 Beautiful People 【双序列LIS输出下标】
- 数据挖掘 贝叶斯算法
- 有了梭子和毛线就能织出各式各样的衣服
- Hibernate学习——第一章