0

次のテーブルがあります。

USER
    ID VARCHAR(32) INTEGER NOT NULL

ROLE
    ID INTEGER NOT NULL

USERROLE /*Many to Many*/
    USER_ID VARCHAR(32) NOT NULL
    ROLE_ID INTEGER NOT NULL

注釈を使用して、DB テーブルをクラスにマップしています。

/* Mapping for USER table */
@Entity
@Table (name="USER")
public class User{
    @Id
    @Column (name="ID")
    private String id;

    @ManyToMany 
    @JoinTable (name="USERROLE", joinColumns = {@JoinColumn (name="USER_ID")}, 
            inverseJoinColumns = {@JoinColumn (name="ROLE_ID")})
    @LazyCollection (LazyCollectionOption.FALSE)
    private List<Role> roles;
}

/* Mapping for ROLE table */
@Entity
@Table (name="ROLE")
public class Role {
    @Id
    @Column (name="ID")
    private int id;

}

ここで、ROLE テーブルと USERROLE テーブルを結合するクエリを実行して、ユーザーが割り当てられている ROLE を取得できるようにしたいと考えています。

- 編集

Role.id があり、この Role が USERROLE テーブルで参照されているかどうかを確認したい。ネイティブ SQL では、次のようにします。

SELECT DISTINCT A.* from ROLE A INNER JOIN USERROLE B 
WHERE A.ID = B.ROLE_ID AND A.ID = ?;

HibernateTemplate を使用して休止状態で行う方法は?

4

1 に答える 1

1

とても簡単です:

select role from User user inner join user.roles role where user.id = :userId

または、クエリなしでさらに簡単に:

User user = (User) session.get(User.class, userId);
return user.getRoles();

EDIT : 特定のロールが少なくとも 1 人のユーザーによって参照されているかどうかを確認するには、次のクエリを使用できます。これは、SQL クエリと非常によく似ています。

select distinct role from User user 
inner join user.roles role 
where role.id = :roleId
于 2012-10-17T10:54:52.273 に答える