相关疑难解决方法(0)

Hibernate Criteria使用FetchType.EAGER多次返回子项

我有Order一个列表的类,OrderTransactions我用一对多的Hibernate映射映射它,如下所示:

@OneToMany(targetEntity = OrderTransaction.class, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
    return orderTransactions;
}
Run Code Online (Sandbox Code Playgroud)

这些Order还有一个字段orderStatus,用于使用以下条件进行过滤:

public List<Order> getOrderForProduct(OrderFilter orderFilter) {
    Criteria criteria = getHibernateSession()
            .createCriteria(Order.class)
            .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow()));
    return criteria.list();
}
Run Code Online (Sandbox Code Playgroud)

这有效,结果如预期.

现在这里是我的问题:为什么,当我明确地设置fetch类型时EAGER,Orders会在结果列表中多次出现?

@OneToMany(targetEntity = OrderTransaction.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
    return orderTransactions;
}
Run Code Online (Sandbox Code Playgroud)

如何更改我的Criteria代码以使用新设置达到相同的结果?

java hibernate

113
推荐指数
4
解决办法
7万
查看次数

Hibernate list()是否有效返回重复项?

是否有人知道Hibernate的有效性Criteria.list()Query.list()返回多次出现的同一实体的方法?

我偶尔会发现在使用Criteria API时,在我的类映射定义中更改默认提取策略(从"select"到"join")有时会影响对同一实体的多少引用可以出现在结果输出中list(),并且我我不确定是否将此视为一个错误.javadoc没有定义它,只是简单地说"匹配的查询结果列表".(多谢你们).

如果这是预期和正常的行为,那么我可以自己重复删除列表,这不是问题,但如果它是一个错误,那么我宁愿避免它,而不是重复删除结果并试图忽略它.

有人有这方面的经验吗?

java hibernate

29
推荐指数
2
解决办法
2万
查看次数

遍历ORM关系会返回重复的结果

我有4张桌子 - store, catalog_galleries, catalog_images, and catalog_financials.

store --> catalog_galleries --> catalog_images换句话说,当我遍历关系时:store.getCatalogGallery().getCatalogImages()我得到重复的记录.有谁知道这可能是什么原因?关于在哪里看的任何建议?

store表具有一种OneToOne关系,catalog_galleries该关系又具有OneToMany与之关系catalog_images和渴望获取类型.该store表也OneToMany与之有关系catalog_financials.

以下是相关实体:

商店实体

@Entity
@Table(name="store")  
public class Store {
    ...
    private CatalogGallery gallery;
    ...
    @OneToOne(mappedBy="store")
    public CatalogGallery getGallery() {
        return gallery;
    }
}
Run Code Online (Sandbox Code Playgroud)

CatalogGallery实体

@Entity
@Table(name="catalog_galleries")  
public class CatalogGallery {
    ...
    private Store store;
    private Collection<CatalogImage> catalogImages;
    ...
    @OneToOne
    @PrimaryKeyJoinColumn
    public Store getStore() {
        return store;
    }

    @OneToMany(mappedBy="catalogGallery", …
Run Code Online (Sandbox Code Playgroud)

java sql hibernate jpa

4
推荐指数
1
解决办法
1775
查看次数

标签 统计

hibernate ×3

java ×3

jpa ×1

sql ×1