因此,假设我有一个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));
}
}
答案 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);
}
}