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

原文地址:https://www.cnblogs.com/colin220/p/9088871.html