2012-05-23 54 views
0

有没有一种工具能够从sql查询开始生成java hibernate代码? (与hibernate所做的相反,从java代码中生成选择)它将帮助我将所有查询移动到休眠状态!从sql代码自动生成java hibernate代码

我的意思是,如果我有一个选择,像这样的参数:

select ta.id label, ta.nume value 
    from ar 
    left outer join ta ta on idp = ta.ID 
    where ta.status = 1 
    and (dp = 0 OR ps = idps_) 
    and status = 1 
order by ta.nume; 

获得最终是这样的:

DetachedCriteria criteria = DetachedCriteria.forEntityName("ar"); 
    criteria.createAlias("ta", "ta", Criteria.LEFT_JOIN); 
    criteria.add(Restrictions.eq("ta.status", 1)); 
    Criterion eq = Restrictions.eq("ps.id", idps_); 
    Criterion isZero = Restrictions.eq("dp.id", 0); 
    Criterion or = Restrictions.or(eq, isZero); 
    criteria.add(or); 
    criteria.add(Restrictions.eq("status", 1)); 
    ProjectionList projectionList = Projections.projectionList(); 
    projectionList.add(Projections.property("ta.id"), "value"); 
    projectionList.add(Projections.property("ta.nume"), "label"); 
    criteria.setProjection(Projections.distinct(projectionList)); 
    criteria.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); 
    criteria.addOrder(Order.asc("ta.nume")); 

或使用地图作为输出类似的东西...

向工具提供存储实体/ bean与表的映射的路径(或者豆的路径,如果bean被注释)

+2

考虑到语法的接近性,将SQL转换为HQL会容易得多。 –

+0

我不明白你为什么这么做; hibernate会再次变成sql – Tom

+0

是的,我可以使用HQL,但想法是尽可能使用面向对象的方法...和jpa似乎是最好的方式去...所以我想使用jpa .. 。但似乎im绑定到hql现在.... – MihaiS

回答

0

您有HQL,它是一种类似SQL的方言,可以与Hibernate一起使用。您从实体中使用字段名称而不是来自表格的字段名称。它支持连接等。

事实上,Criteria API对连接的支持非常有限(至少这是我最后一次尝试使用),并且我已经完成了几次重写从Criteria API到HQL的所有内容,所以我现在只是将Criteria API作为不可选项。

在HQL中,您还可以在SELECT和WHERE部分中使用SQL函数,嵌入式和自己编写的SQL函数。

+0

是的,这将是“简单”的解决方案,但我想使用对象和jpa(如果可能) – MihaiS