【问题标题】:Joining two table entities in Spring Data JPA with where clause使用 where 子句连接 Spring Data JPA 中的两个表实体
【发布时间】:2017-12-19 08:59:15
【问题描述】:

我一直在下面寻找我的问题的答案,但到目前为止没有任何结果。

快速解释:

一个人可以拥有多个角色,角色与权限是多对多的关系。

我有实体,角色

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "ROLE")
@Where(clause = "RECORD_STATUS = 'A'")
@SQLDelete(sql = "UPDATE ROLE SET RECORD_STATUS = 'D' where OBJID = ?")
public class Role extends BaseEntity implements Serializable {

   private String roleDescription;
   private String roleName;



   @JoinTable(
        name = "ROLE_PRIVILEGE",
        joinColumns = @JoinColumn(
                name = "roleOid"
        ),
        inverseJoinColumns = @JoinColumn(
                name = "privilegeOid"
        )
    )
    @Where(clause = "RECORD_STATUS = 'A'")
    @ManyToMany(fetch = FetchType.EAGER)
    List<Privilege> privileges;
}

特权实体:

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "PRIVILEGE")
@Where(clause = "RECORD_STATUS = 'A'")
@SQLDelete(sql = "UPDATE PRIVILEGE SET RECORD_STATUS = 'D' where OBJID = ?")
public class Privilege extends BaseEntity implements Serializable {

   private String description;
   private String privilegeName;



}

我想像这样加入这两个表:

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "ROLE_PRIVILEGE")
@Where(clause = "RECORD_STATUS = 'A'")
@SQLDelete(sql = "UPDATE ROLE_PRIVILEGE SET RECORD_STATUS = 'D' where OBJID 
= ?")
public class RolePrivilege extends BaseEntity implements Serializable {

   private String roleOid;
   private String privilegeOid;

}

问题是,当我尝试获取一个人的角色时,它们都带有特权。但是,hibernate 并不关心 ROLE_PRIVILEGE 实体中的 where 子句:

select
 privileges0_.role_oid as role_oid8_23_0_,
 privileges0_.privilege_oid as privileg7_23_0_,
 privilege1_.objid as objid1_21_1_,
 privilege1_.creation_date as creation2_21_1_,
 privilege1_.last_change_date as last_cha3_21_1_,
 privilege1_.luc as luc4_21_1_,
 privilege1_.record_status as record_s5_21_1_,
 privilege1_.user_created as user_cre6_21_1_,
 privilege1_.description as descript7_21_1_,
 privilege1_.privilege_name as privileg8_21_1_
from
 role_privilege privileges0_
 inner join
  privilege privilege1_
   on privileges0_.privilege_oid=privilege1_.objid
where
(
  privilege1_.RECORD_STATUS = 'A'
)
and privileges0_.role_oid=?

我的意思是,当我停用角色特权元组(角色不再具有该特权)时,仍然会出现在我身上。在哪里可以将@where 子句添加到 ROLE_PRIVILEGE 表?

所有建议都非常受欢迎!

【问题讨论】:

    标签: java spring hibernate jpa


    【解决方案1】:

    我真的不知道我是怎么错过的,但找到了解决方案。

    @WhereJoinTable(clause = "RECORD_STATUS = 'A' ")
    

    JPA @JoinTable with extra join conditions

    【讨论】:

      猜你喜欢
      • 2013-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 2018-06-13
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      相关资源
      最近更新 更多