Hibernate:FetchMode和org.hibernate.QueryException:重复的关联路径:

时间:2016-02-07 08:52:54

标签: hibernate

  • UserFullTest有一个associatedTestContentElementResponses的集合

  • 每个TestContentElementResponse依次拥有associatedResponseAttributes的集合

我想在一次获取中提取所有数据。

这是我的代码:

        Session session = this.sessionFactory.getCurrentSession();
        Criteria c=session.createCriteria(UserFullTest.class);
        c.createAlias("associatedTestContentElementResponses", "tcer");
        c.setFetchMode("tcer", FetchMode.JOIN);

        c.add(Restrictions.idEq(uftId));
        Criteria cra=c.createCriteria("tcer.associatedResponseAttributes");
        cra.createAlias("tcer.associatedResponseAttributes", "ra");
        cra.setFetchMode("ra", FetchMode.JOIN);
        List<UserFullTest> uftList = c.list();

我得到以下例外:

  

org.hibernate.QueryException:重复的关联路径:associatedTestContentElementResponses.associatedResponseAttributes

任何提示都会非常感激

我应该解释一下...... 如果我没有指定subCriteria FetchMode,则它使用Select模式。因此,我试图通过包含子标准来获取所有内容。我知道数据拉的确切大小,所以我知道单个提取是最好的做法

1 个答案:

答案 0 :(得分:0)

您创建条件的方式需要更改如下。

    Session session = this.sessionFactory.getCurrentSession();
    Criteria c=session.createCriteria(UserFullTest.class).createCriteria("tcer.associatedResponseAttributes");
    c.createAlias("associatedTestContentElementResponses", "tcer");
    c.setFetchMode("tcer", FetchMode.JOIN);

    c.add(Restrictions.idEq(uftId));

    c.createAlias("tcer.associatedResponseAttributes", "ra");
    c.setFetchMode("ra", FetchMode.JOIN);
    List<UserFullTest> uftList = c.list();
相关问题