inversejoincolumns
时间: 2023-04-20 19:02:16 浏览: 348
inversejoincolumns是JPA注解中的一种,用于指定关系的反向关联字段。它通常与joincolumns一起使用,用于定义实体之间的关系。inversejoincolumns指定了反向关联的实体中的字段,以便在查询时能够正确地获取关联数据。
相关问题
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
}
```
@ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "orders_goods",joinColumns = @JoinColumn(name = "oid"), inverseJoinColumns = @JoinColumn(name = "gid")) private Set<Goods> goodsSet;是什么意思?
这是一个Java实体类中的注解,表示该类中的一个关系属性。该属性表示订单与商品之间是多对多关系。EAGER表示在获取订单时,同时获取与其关联的商品。@JoinTable表示使用中间表 orders_goods 来记录订单与商品之间的关系,joinColumns表示中间表中与订单相关的列,inverseJoinColumns表示中间表中与商品相关的列。Set<Goods>表示存储与当前订单关联的商品集合。