我是hibernate的初学者。我的意图非常简单:我已将对象映射到一个带注释的表中。现在我想将它们作为对象列表检索以显示它们。后来我想实现简单的过滤器。
我是否需要编写SQL查询?还是有一种基于注释的方法?
选项1:请参阅Rupeshit的解决方案!
有一个问题:我应该使用什么样的清单? hibernate还是util?
这可能是一个选项吗?:link
答案 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。