【问题标题】:Named entity graph JOINS results (need distinct option) in Spring Data JPASpring Data JPA中的命名实体图JOINS结果(需要不同的选项)
【发布时间】:2014-08-10 11:27:16
【问题描述】:

我正在使用@NamedEntityGraph 注解从数据库中加载图表。

@NamedEntityGraph(
    name = "Firma.uredjivanje",
    attributeNodes = {
            @NamedAttributeNode(value="prevodi", subgraph = "prevodi")
    },
    subgraphs = {
            @NamedSubgraph(
                    name = "prevodi",
                    attributeNodes = {
                            @NamedAttributeNode(value = "jezik", subgraph = "jezik")
                    }
            )
    }
)

在 Spring Data JPA 存储库中,我正在使用注解:

@EntityGraph(value="Firma.uredjivanje", type = EntityGraph.EntityGraphType.LOAD)
List<Firma> getByAktivna(boolean aktivna);

一切都按预期工作,期望所有关系都已加入,并且我得到重复的 Firma 实体(因为 JOIN)。我得到的是 {1,1,1,2,2,3},而不是实体 ID 为 {1,2,3} 的列表。

获得不同实体的最佳方法是什么(如果这当然不是错误)。

【问题讨论】:

    标签: java spring hibernate jpa


    【解决方案1】:

    找到答案... 由于 NamedEntityGraph 在数据库中进行 JOIN,因此它会选择所有没有 DISTINCT 的实体。所以解决方法是在方法名中使用 Distinct...

    @EntityGraph(value="Firma.uredjivanje", type = EntityGraph.EntityGraphType.LOAD)
    List<Firma> getDistinctByAktivna(boolean aktivna);
    

    【讨论】:

    • 尊敬的先生,您拯救了我的一天!非常感谢您为方法查询提示“不同”关键字!
    【解决方案2】:

    添加dictinct 后,我在服务器启动期间有错误日志(可能是因为没有findDistinctAll() 这样的东西。

    请在https://jira.spring.io/browse/DATAJPA-680 中帮我提示。

    我在方法中添加了@Query注解,所以我的方法如下所示

    @EntityGraph(value = "User.detail", type = EntityGraph.EntityGraphType.LOAD)
    @Query(value = "SELECT DISTINCT u FROM User u")
    List<User> findAll();
    

    【讨论】:

    • 不要忘记@QueryHints(value = { @QueryHint(name = HINT_PASS_DISTINCT_THROUGH, value = "false")}) 不要将不同的数据发送到 SQL 中
    猜你喜欢
    • 2017-05-15
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2014-12-29
    • 2016-12-03
    • 2019-09-30
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多