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

  • 相关阅读:
    Xcode删除断点的方法
    UIImageView上面不能加载button
    TTThumbsViewController 由 4张 改为 3张的方式
    TTThumbsViewController 由 4张 改为 3张的方式 增补
    TTButton 的正确使用的方法
    使用缓存到本地的图片对initWithUrl的进行初始化
    extThree20XML extThree20JSON 引入到工程中的方式
    TTButton的使用小结
    千万别study English,应学会learn English——英语学习方法强烈推荐
    转脱壳方法
  • 原文地址:https://www.cnblogs.com/colin220/p/9088871.html
Copyright © 2020-2023  润新知