JPA:如何根据 ID 以外的字段值获取实体?

2022-08-31 12:10:05

在JPA(休眠)中,当我们自动生成ID字段时,假设用户对此键一无所知。因此,在获取实体时,用户将基于ID以外的某些字段进行查询。在这种情况下,我们如何获取实体(因为不能使用)。em.find()

我知道我们可以使用查询并在以后过滤结果。但是,有没有更直接的方法(因为据我所知,这是一个非常普遍的问题)。


答案 1

正如你所说,这不是一个“问题”。

Hibernate具有内置的,但您必须构建自己的查询才能获得特定的对象。我建议使用Hibernate的:find()Criteria

Criteria criteria = session.createCriteria(YourClass.class);
YourObject yourObject = criteria.add(Restrictions.eq("yourField", yourFieldValue))
                             .uniqueResult();

这将在当前类上创建一个,并添加“yourField”列等于值的限制。 告诉它带来独特的结果。如果匹配的对象更多,则应检索列表。criteriayourFieldValueuniqueResult()

List<YourObject> list = criteria.add(Restrictions.eq("yourField", yourFieldValue)).list();

如果您有任何其他问题,请随时提问。希望这有帮助。


答案 2

如果您有实体的存储库,并且需要选择具有精确字符串值的所有条目(也适用于其他基元类型或实体类型)。将其放入您的存储库界面:Fooboo

List<Foo> findByBoo(String boo);

如果您需要订购结果:

List<Foo> findByBooOrderById(String boo);

有关详细信息,请参阅参考


推荐