如何用Hibernate检测列冲突?

时间:2010-04-29 04:59:10

标签: java hibernate conflict

因此,假设我有一个ArrayList,其中包含需要通过Hibernate提交到数据库的产品。数据库中已有大量产品。每个产品都有一个ID。请注意,这不是Hibernate自动生成的PK。

我的问题是:检测此ID冲突的最佳方法是什么?我正在寻找一种相对有效的方法,从数据库中获取与我的ArrayList中的任何产品共享ID的产品列表。这都在名为Products的单个表中,ID属性在ProductID列中。

我这样做的方法是获取数据库中所有产品的列表,并将每个产品与我的ArrayList中的每个条目进行比较 - 但这样效率非常低,而且我认为它不适用于更大的产品数据库。应该怎么做?谢谢。我说“相对”有效率,因为效率不是主要关注点,但是对于大约1000-5000行的表来测试它不应该花费很长时间。帮助

编辑*我对休眠非常新,以下是我想出的最好的。这看起来怎么样?

for(long id : idList){ //idList just holds the IDs of each Product in my ArrayList
    Query query = session.createQuery("select product from Product product where product.id = :id");
    query.setLong("id", id);
    for(int i = 0; i < query.list().size(); i++){
        listOfConflictingProducts.add((Product) query.list().get(i));
    }
}

1 个答案:

答案 0 :(得分:1)

我只调用一次query.list():否则每次都可以重新运行查询:

for(long id : idList){ //idList just holds the IDs of each Product in my ArrayList
    Query query = session.createQuery("select product from Product product where product.id = :id");
    query.setLong("id", id);
    List result = query.list();
    for(int i = 0; i < result.size(); i++){
        listOfConflictingProducts.add((Product) result.get(i));
    }
}

或者更简单:

for(long id : idList){ //idList just holds the IDs of each Product in my ArrayList
    Query query = session.createQuery("select product from Product product where product.id = :id");
    query.setLong("id", id);
    for(Object obj: query.list()){
        listOfConflictingProducts.add((Product)obj);
    }
}