首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过hibernate生成namedQuery?

如何通过hibernate生成namedQuery?
EN

Stack Overflow用户
提问于 2010-12-02 22:59:56
回答 3查看 1.7K关注 0票数 1

我在一个项目中工作,其中Java实体类是由hibernate工具从db方案生成的。我希望在生成的类中有命名查询,以便能够通过它们的一个非主键字段查找实体。我希望有这样的namedQueries : findUserByName或findUserByHeight。对于这一目的,除了entitymanger.find()和Criteria API之外,命名查询将是一个最佳选择。

我的问题是如何配置hibernate工具/ hbm2java /逆向工程策略来为数据库表中的每一列生成namedQueries。我在网上没有找到任何相应的信息。我希望这是可能的。使用NetBeans中的Eclipse JPA2.0持久性管理器,我能够生成命名查询。

EN

回答 3

Stack Overflow用户

发布于 2010-12-03 00:01:30

如果你使用的是Spring,那么你应该看看Hades。它提供了使用方法名创建SQL语句的功能。您唯一需要做的就是编写一个接口(DAO) --它的实现是由Hades“模拟”的。

所以你可以像这样写一个方法声明:

代码语言:javascript
复制
public interface CustomerDAO {
  List<Customer> findByFirstName(String firstName);
}

如果方法名-- sql语句映射不适用于复杂的查询,那么Hades提供了使用注释中定义的语句的功能。

代码语言:javascript
复制
@Query("FROM Deal as x WHERE customer = :customer AND (x.zombie = 'NONE' OR x.zombie ='NEW')")
Deal findActiveDealByCustomer(@Param("customer") Customer customer);

@see http://redmine.synyx.org/projects/show/hades -我真的很喜欢这个项目

票数 1
EN

Stack Overflow用户

发布于 2010-12-02 23:33:25

恐怕这不是真正的Java风格。

您想要的方法让我想起了RailsGrails,这两个概念在像Java这样的静态野兽中不能很好地工作(不要误会,我爱我的野兽)。

Spring Roo模仿rails和grails的功能,并生成您想要的控制器方法,但这意味着您必须使用Spring Roo。

另一个想法是使用source code parser对生成的代码进行后处理。但这也将是一个艰难的决定。

最好的办法可能是获得hbm2java工具的代码,并为您的例程添加一个钩子。

票数 0
EN

Stack Overflow用户

发布于 2014-09-14 03:56:12

手动生成那些您真正需要的查询不是更好吗?我有相同的设置,我的pojos和映射是自动生成的,我也希望使用命名查询。

我解决了这个问题,创建了一个新的集中式映射文件,其中包含我所有的命名查询。即使我必须再次执行自动生成REVENG过程,这个查询映射文件也不会被替换,并且仍然有效。

我知道你想做什么。您希望使REVENG自动将命名查询合并到生成的代码/映射中。当我开始使用REVENG时,我也得出了同样的结论。但后来我意识到,REVENG不应该对此负责。相反,它应该从db模式中生成内容。不多也不少。命名查询不是db模式的一部分。所以这里不应该滥用REVENG。

看一看here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4336340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档