zoukankan      html  css  js  c++  java
  • Hibernate:注解@OneToMany和@ManyToOne的单独使用问题 不成对使用

    以某个实际场景为例,现在两张表:用户表User 订单表Order;很显然用户对订单是一对多的关系。二者注解如下

    用户表User

    @Entity
    @Table(name="users")
    public class User{
    
    private Integer id;
    private String name;
    
    @OneToMany
    private List<Order> orders; 
    }

    订单表Order

    @Entity
    @Table(name="order")
    public class order{
    
    private Integer id;
    private String name;
    
    @ManyToOne
    @JoinColumn(name = "userId")
    private user user; 
    } 

    以上就完成了两张表之间的外键维护,这种使用场景很常见,此处不再赘述。

     

    下面说一下另外的业务场景,User表和Order使用了很久,后面需要加一个地址表Address,这个表是用户的收货地址,一个用户有多个收货地址,地址表只是单方面依赖用户表,而用户的地址在业务场景中使用的并不是很频繁,而且此时不想修改User表,这个时候,只需要在Address表中加入@ManyToOne就可以,不用对User表做任何修改,如下

    @Entity
    @Table(name="address")
    public class Address{
    
    private Integer id;
    private String name;
    
    @ManyToOne
    @JoinColumn(name = "userId")
    private user user; 
    }

    对User表不用做修改,就可以解决问题。

     

    总结:@OneToMany和@ManyToOne是可以分开使用的,不一定非要成对出现。成对使用可以让数据结构更加完整,单独使用的好处是可以轻易扩展原有数据。以上面的例子为例,假如Address表后期不在使用,删除之后也不会对User表造成任何影响。但是Order表却不能轻易删除,删除时会出现外键约束问题。这个就是单独使用@ManyToOne的好处。

    单独使用@ManyToOne时也会出现一些问题,在做级联操作时会出现问题。

  • 相关阅读:
    CSS浏览器兼容解决总结
    Access的数据操作类(带异常处理)
    网页消息类
    生成验证码(纯中文)
    C#连接各种数据库(持续更新中)
    asp.net中实现文件批量上传!你会了吗?
    http 错误编号大全(转)
    SQL SERVER数据操作类
    web.config加密和解密
    C#中操作CMD命令行窗口
  • 原文地址:https://www.cnblogs.com/colin220/p/9088871.html
Copyright © 2011-2022 走看看