• 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时也会出现一些问题,在做级联操作时会出现问题。

  • 相关阅读:
    作为面试官,中级应用级Web前端我会问什么问题
    vue相关项目提示 Failed to resolve Loader: sass-loader
    [Vue warn]: Error in beforeDestroy hook: "Error: [ElementForm]unpected width
    JVM调优方法
    HTTP协议—— 简单认识TCP/IP协议
    关于软件的版本管理
    开源数据库
    PE51
    浅谈限流组件的应用和设计原则
    Spring+AspectJ框架使用实践
  • 原文地址:https://www.cnblogs.com/colin220/p/9088871.html
Copyright © 2020-2023  润新知