【问题标题】:Automatic generation of java hibernate code from sql code从 sql 代码自动生成 java hibernate 代码
【发布时间】:2012-05-30 00:28:59
【问题描述】:

是否有工具能够从 sql 查询开始生成 java hibernate 代码? (就像 hibernate 所做的相反,从 java 代码生成选择)它将帮助我将所有查询移动到休眠!

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

 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 的路径,如果 bean 被注释)

【问题讨论】:

  • 鉴于语法的接近性,将 SQL 转换为 HQL 会容易得多。
  • 我不明白你为什么要这样做; hibernate 无论如何都会把它变成 sql
  • 是的,我可以使用 HQL,但我的想法是尽可能使用面向对象的方法……而 jpa 似乎是最好的方法……所以我想使用 jpa……但似乎我现在绑定到 hql....

标签: java sql hibernate reverse-engineering


【解决方案1】:

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

事实上,Criteria API 对连接的支持非常有限(至少我上次尝试使用时是如此),而且我已经完成了几次从 Criteria API 到 HQL 的所有内容的重写,所以我现在只是简单地进行Criteria API 不可选项。

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

【讨论】:

  • 是的,这将是“简单”的解决方案,但我想使用对象和 jpa(如果可能的话)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2016-04-05
  • 1970-01-01
  • 2010-10-04
  • 2010-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多