JPA 關聯表添加關聯條件@Where、@WhereJoinTable()

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打印
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章