【问题标题】:How I get a Set<Object> using QueryDSL?如何使用 QueryDSL 获得 Set<Object>?
【发布时间】:2012-03-21 20:09:55
【问题描述】:

我在这里映射了一个 Person 实体,在这个实体内部我有一组使用 JPA Annotations 映射的角色(设置角色),好的...好吧,我无法使用 QueryDSL 从这个命令中获取角色集:

Set<Role> roles = query.from(qPerson).where(qPerson.login.eq(userName)).uniqueResult(qPessoa.roles);

这可能吗?你有什么建议?谢谢大家。

【问题讨论】:

    标签: hibernate annotations set querydsl


    【解决方案1】:

    JPA不支持这个,但是可以使用下面的形式

    query.from(qPerson).innerJoin(qPerson.roles, qRole)
      .where(qPerson.login.eq(userName))
      .list(qRole);
    

    【讨论】:

    • 我现在到了这里,但我认为这种方式更好。我试试,谢谢!我明白了:对象角色 = query.from(qPerson).where(qPerson.login.eq(userName)).list(qPerson.roles); if (roles != null && (roles instanceOf List)) { List rolesList = (List) roles; Set rolesSet = new HashSet(); for(角色角色:角色列表){角色集.add(角色); } } 等等……
    • 这看起来很奇怪。为什么不确定结果的类型?
    • 我查看了 querydsl 代码并意识到 queryDSL 返回一个对象的 ArrayList,然后才转换。然后,由于我确定类型,我决定这样做。我不认为我需要一个奇怪的黑客,而是一个伟大的黑客,因为只是做了一个转换类型并解决了我的问题。 (对不起我的英语)
    • 它有效,我只是不希望它被更广泛地采用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多