JPA 關聯表添加關聯條件,當我其中一個表的數據狀態發送改變,不是業務上所需要的,這時實體查詢還是會帶出關聯數據,所以我們需要處理這部分數據;第一種方式:刪除中間表對應數據;第二種添加關聯條件,按條件帶出有效數據
- 代碼示例
- 用戶實體
@Entity @Table(name = "pmi_t_user") @org.hibernate.annotations.Table(appliesTo = "pmi_t_user",comment="用戶信息表") @Component @ApiModel(value = "用戶實體") public class User implements Serializable { private static final long serialVersionUID = -4618191047832700121L; /** * 主鍵id */ @ApiModelProperty(value = "主鍵id") @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * 用戶名 */ @ApiModelProperty(value = "用戶名", required = true) @NotBlank(message = "用戶名不能爲空") @Column(name = "user_name", nullable = false,columnDefinition="varchar(100) COMMENT '用戶名'") private String userName; /** * 關聯角色 db_status 是數據庫角色表字段 * @WhereJoinTable(clause = "db_status = 1") */ @ApiModelProperty(value = "關聯角色") @ManyToMany(fetch = FetchType.EAGER,targetEntity = Role.class) @JsonIgnoreProperties(value = { "users" }) @Where(clause = "db_status = 1") @JoinTable(name = "pmi_t_user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id")) @org.hibernate.annotations.ForeignKey(name = "none") private Set<Role> roles; }
- 角色
@Entity @Table(name = "pmi_t_role") @org.hibernate.annotations.Table(appliesTo = "pmi_t_role",comment="角色") @ApiModel(value = "角色") public class Role implements Serializable { private static final long serialVersionUID = 2376963713493278377L; /** * 主鍵id */ @ApiModelProperty(value = "主鍵id") @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * 角色名稱 */ @ApiModelProperty(value = "角色名稱") @NotNull(message = "角色名稱不能爲空") @Length(max = 20,min=1, message = "角色名稱長度大於1小於20") @Column(name = "role_name", nullable = false,columnDefinition="varchar(20) COMMENT '角色名稱'") private String roleName; /** * 數據狀態 1:正常 -1:刪除 */ @ApiModelProperty(value = "數據狀態") @Column(name = "db_status", nullable = false,columnDefinition="tinyint(4) DEFAULT '1' COMMENT '數據狀態 1:正常 -1:刪除'") private int dbStatus; }
- 查詢效果:
- sql打印