문제

나는 3 개의 콩을 가지고 있습니다 :조직, 역할, 사용자

역할 - 조직 관계 - @ManyToOne

역할 - 사용자 관계 - @ManyToMany

조직 :

    @Entity
    @Table(name = "entity_organization")
    public class Organization implements Serializable {

        private static final long serialVersionUID = -646783073824774092L;

        @Id
        @GeneratedValue(strategy = GenerationType.TABLE)
        Long id;

        String name;

        @OneToMany(targetEntity = Role.class, mappedBy = "organization")
        List<Role> roleList;

...

역할 :

    @Entity
    @Table(name = "entity_role")
    public class Role implements Serializable {

        private static final long serialVersionUID = -8468851370626652688L;

        @Id
        @GeneratedValue(strategy = GenerationType.TABLE)
        Long id;

        String name;

        String description;

        @ManyToOne
        Organization organization;

...

사용자 :

    @Entity
    @Table(name = "entity_user")
    public class User implements Serializable {

        private static final long serialVersionUID = -4353850485035153638L;

        @Id
        @GeneratedValue(strategy = GenerationType.TABLE)
        Long id;
        @ManyToMany
        @JoinTable(name = "entity_user_role",
                joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
                inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName =                     "id"))
        List<Role> roleList;

...

따라서 지정된 사용자에 대한 모든 조직을 가져와야 합니다(먼저 모든 사용자 역할을 선택하고 이 역할이 있는 모든 조직을 선택해야 함).

이 논리를 실현하는 SQL 문이 있습니다(예:ID = 1인 사용자를 선택합니다.

SELECT * FROM entity_organization AS o 
INNER JOIN entity_role r ON r.organization_id = o.id 
INNER JOIN entity_user_role ur ON ur.role_id=r.id 
WHERE ur.user_id = 1

최대 절전 모드 명명된 쿼리 메커니즘을 사용하여 이를 어떻게 구현할 수 있나요?감사해요!

도움이 되었습니까?

해결책

@NamedQuery

@NamedQuery 엔티티 클래스에 다음과 같은 Organization를 만들었습니다. 라코 디스

(표준 JPA 주석을 사용했지만 제공자는 Hibernate였습니다.)

테스트

내가 실행 한 테스트입니다. 라코 디스

아래 표와 샘플 데이터를 사용하면 다음과 같은 결과를 얻을 수 있습니다. 라코 디스

효과가 있는지 확인하세요.

라코 디스

( 당신 과 약간 다른 것을 사용했지만 너무 중요하지는 않습니다.)

샘플 데이터 라코 디스

다른 팁

아래와 같이 HQL을 사용해 보세요.

select ur.roleList.organization from User ur where ur.id = 1 

그것은 당신에게 줄 것입니다 List<Organization>.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top