@ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "orders_goods",joinColumns = @JoinColumn(name = "oid"), inverseJoinColumns = @JoinColumn(name = "gid")) private Set<Goods> goodsSet;是什么意思?
时间: 2023-05-25 22:04:14 浏览: 77
这是一个Java实体类中的注解,表示该类中的一个关系属性。该属性表示订单与商品之间是多对多关系。EAGER表示在获取订单时,同时获取与其关联的商品。@JoinTable表示使用中间表 orders_goods 来记录订单与商品之间的关系,joinColumns表示中间表中与订单相关的列,inverseJoinColumns表示中间表中与商品相关的列。Set<Goods>表示存储与当前订单关联的商品集合。
相关问题
@ManyToMany(fetch = FetchType.EAGER) 是什么意思
这是一个注解,用于定义关系型数据库之间表之间的多对多关系。fetch属性定义了数据的抓取策略,EAGER表示在读取主表对象时立即抓取与之关联的从表对象,即立即加载所有相关实体。这个策略适用于被关联的数据较少的场景,能够大大提高查询效率。但是,EAGER同样会增加内存的负担,如果被关联的数据量较大,对于性能会有一定的影响。
java jpa使用了@ManyToMany注解,其中Role类中有一个属性@ApiModelProperty(hidden = true) @ManyToMany @JoinTable(name="system_role_permission", joinColumns= @JoinColumn(name="role_id", referencedColumnName="id"), inverseJoinColumns= @JoinColumn(name="permission_id", referencedColumnName="id") ) private List<Permission> permissions; Permission类中有一个属性 @ApiModelProperty(hidden = true) @ManyToMany(mappedBy = "permissions") @JsonIgnore private List<Role> roles; ,在修改的时候只想删除掉中间表,不想删除掉集合里面包含真正的实体类,如何做,请出示完整代码
如果你只想删除中间表而不删除集合中的实体类,可以使用JPA的@ManyToMany注解中的cascade属性来实现。将cascade属性设置为CascadeType.REMOVE,表示在删除一个Role实体时,只删除Role与Permission之间的关系,而不删除Permission实体本身。
修改Role类中的@ManyToMany注解,如下所示:
```
@ManyToMany(cascade = CascadeType.REMOVE)
@JoinTable(name="system_role_permission",
joinColumns=@JoinColumn(name="role_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="permission_id", referencedColumnName="id")
)
private List<Permission> permissions;
```
这样,在删除Role实体时,只会删除Role与Permission之间的关系,而不会删除Permission实体本身。同理,如果你想删除Permission实体时,只删除Permission与Role之间的关系而不删除Role实体本身,可以在Permission类中的@ManyToMany注解中设置cascade属性为CascadeType.REMOVE。
完整代码如下所示:
Role类:
```
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(cascade = CascadeType.REMOVE)
@JoinTable(name="system_role_permission",
joinColumns=@JoinColumn(name="role_id", referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="permission_id", referencedColumnName="id")
)
private List<Permission> permissions;
// getters and setters
}
```
Permission类:
```
@Entity
public class Permission {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToMany(mappedBy = "permissions", cascade = CascadeType.REMOVE)
@JsonIgnore
private List<Role> roles;
// getters and setters
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)