Java 有没有一种不用生成SQL就可以在hibernate上查询的方法?

Java 有没有一种不用生成SQL就可以在hibernate上查询的方法?,java,hibernate,criteria,Java,Hibernate,Criteria,我需要像这样查询我的数据库(postgres): 实体: 主要类别: int [] idCats = {1,2,7,5,8,4,9,10,12,14}; for(int id : idCats){ Cat cat = session.load(Cat,id); (do something with cat, according your name) } 但是,这种方法会生成许多SQL。考虑到我将搜索几乎所有的ID,有一个 使用条件使所有对象在其上搜索的方法。无需自行实现。

我需要像这样查询我的数据库(postgres):
实体:

主要类别:

int [] idCats = {1,2,7,5,8,4,9,10,12,14};

for(int id : idCats){ 
    Cat cat = session.load(Cat,id);
    (do something with cat, according your name)
}
但是,这种方法会生成许多SQL。考虑到我将搜索几乎所有的ID,有一个

使用条件使所有对象在其上搜索的方法。无需自行实现。

您可以使用hibernate的二级缓存功能。但是,如果您的应用程序很简单,您只想获取一个带有id的cat,那么将查询结果存储在hashmap中,如

Map<Integer, Cat> mapCats = new HashMap<Integer, Cat>(); 
Map-mapCats=newhashmap();
您可以使用for循环从DB迭代列表

Map<Integer, Cat> mapCats = new HashMap<Integer, Cat>();
for(Cat oneCat: listCats) { 
    mapCats.put(oneCat.id, oneCat);
}
Map-mapCats=newhashmap();
对于(Cat oneCat:listCats){
mapCats.put(oneCat.id,oneCat);
}
然后使用
mapCats.get(catid)

List cats=session.createCriteria(Cat.class).List()。但不要将其用于大型数据集。您想执行查询:@bgth,我已经在这样使用了,我实现了一个嵌入式的“for”,它遍历猫的列表,并手动比较ID。我想只使用一个select将所有对象缓存到内存中,并使用criteria属性查找特定对象。我确实需要使用criteria。我正在搜索二级缓存和查询缓存,看起来它可以正常工作。这个链接解释了一切。谢谢你的支持
Map<Integer, Cat> mapCats = new HashMap<Integer, Cat>();
for(Cat oneCat: listCats) { 
    mapCats.put(oneCat.id, oneCat);
}