休眠:检索列表

时间:2010-08-16 07:50:28

标签: java hibernate annotations

我是hibernate的初学者。我的意图非常简单:我已将对象映射到一个带注释的表中。现在我想将它们作为对象列表检索以显示它们。后来我想实现简单的过滤器。

我是否需要编写SQL查询?还是有一种基于注释的方法?


选项1:请参阅Rupeshit的解决方案!

有一个问题:我应该使用什么样的清单? hibernate还是util?


这可能是一个选项吗?:link

3 个答案:

答案 0 :(得分:3)

好吧,如果你想检索一些符合某些条件的实体列表,你就可以以某种方式进行查询。 Hibernate提供了几种方法:

选项1:使用Hibernate查询语言。 HQL接近于SQL,除了您处理对象和关联而不是表。 HQL也是可移植的(根据Dialect生成SQL)。这是传统的方式。

Query q = session.createQuery("from foo Foo as foo where foo.name=:name");
q.setParameter("name", "bar"); 
List foos = q.list();

选项2:使用Criteria API。使用Criteria API时,使用面向对象的API编写查询。此API特别适合动态查询。 Criteria查询也是可移植的。

List cats = session.createCriteria(Cat.class)
    .add( Restrictions.like("name", "Fritz%") )
    .add( Restrictions.between("weight", minWeight, maxWeight) )
    .list();

选项3:使用本机SQL查询。如果要使用特定于数据库的功能,通常只使用本机SQL。

List cats = session.createSQLQuery("SELECT * FROM CATS").addEntity(Cat.class);

我可能会在你的情况下使用HQL。

参考

答案 1 :(得分:1)

你可以这样做....首先创建会话对象......然后

 List<DomainClass> domainClass = session.createQuery("from DomainClass e where e.Id=23").list();

因此,您将获得域类类型的对象列表。

答案 2 :(得分:0)

你可以做的最好的事情是从Hibernate开始(或者通常使用新的框架)是搜索教程以了解所有基础知识。 hibernate有很多初学者教程,比如来自hibernate的documentation site。这个教程没问题,虽然它有一些小错误,但几乎没有搜索,你甚至可以找到更好的,这应该符合你的需求。

回答你的问题:你通常会编写HQL命令(基本上与SQL一样,只是使用域对象)来接收你想要的数据。

来自Rupeshit的示例可能有点令人困惑,因为(如果我做对了),列表将始终只有一个条目,因为Id应该是domainClass的主键,所以总是只有一个匹配,但你得到它的全部想法。

编辑:对于结果列表,您通常总是使用util-lists。