java - EJB-QL 3 中的 MEMBER OF 不起作用

标签 java jpa jboss jpql

我想检索许多具有一个共同“角色”的“访问权限”。

这是命名查询:

SELECT access 
FROM Access AS access 
WHERE :role MEMBER OF access.listRole

访问实体

public class Access implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    private String name;
    private String libelle;

    @ManyToOne
    private Module oneModule;
    @ManyToMany
    private List<Role> listRole;
    /* Setter & Getter */
}

角色实体

public class Role implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    private String name;
    private String description;
    @Enumerated(EnumType.STRING)
    private Flag oneFlag;
    @Transient
    private int lengthAccess;

    @OneToMany(mappedBy="oneRole")
    private List<UserAccount> listUserAccount;
    @ManyToMany
    private List<Access> listAccess;

    /* Geter & Setter */
}

但是我没有实现正确的 EJB-QL!

配置:

  • EJB 3
  • MySQL(InnoDB)
  • jBoss
  • 扑通扑通

谢谢。

最佳答案

我无法重现该问题。运行您提供的 JPQL 查询时,如下所示:

String qlString = "SELECT access " + 
                    "FROM Access AS access " + 
                   "WHERE :role MEMBER OF access.listRole";

Role role = new Role();
role.setId(1L);

List accesses = session.createQuery(qlString).setParameter("role", role).list();

Hibernate 为我生成以下 SQL 查询(我通过删除一些属性简化了您的实体):

select
    access0_.id as id127_,
    access0_.libelle as libelle127_,
    access0_.name as name127_ 
from
    Access access0_ 
where
    ? in (
        select
            role2_.id 
        from
            Access_ROLES listrole1_,
            ROLES role2_ 
        where
            access0_.id=listrole1_.Access_id 
            and listrole1_.listRole_id=role2_.id
    )

一切似乎都是正确的(使用 Hibernate Core 3.3.0.SP1、Hibernate Annotations 3.4.0.GA、Hibernate EM 3.4.0.GA 进行测试)

您正在使用哪个版本的 Hibernate(Core、Annotations、EntityManager)?你到底得到了什么错误?您能展示如何调用查询吗?

关于java - EJB-QL 3 中的 MEMBER OF 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3522011/

相关文章:

java - 更改可执行 Jar 文件的图标

java - 在 Restful 客户端中检索枚举的 PostgreSQL 类型

java - @ManyToOne 和@OneToOne 在同一实体上

java - Spring MVC 3.2 : NoClassDefFoundError: java/util/Deque

java - 将 Hibernate 应用程序移动到 JBoss - 超出已声明序号参数数量的位置

java - 如何从头到尾读取一个文件?

java - 正则表达式匹配 IP 范围?

Java谷歌云端点存在查询

java - 通过管理控制台将消息发送到 JBoss 6 中的队列

java - 从 CObArray 到 ArrayList