【问题标题】:ebean in play 2 framework with SQL dialect带有 SQL 方言的 ebean in play 2 框架
【发布时间】:2012-06-04 12:26:48
【问题描述】:

我正在尝试使用 ebean ORM 层在 Teradata 13.10 和 play 2 框架之间建立友谊。我的应用确实尝试查询数据库:

 select t0.workflow_id c0, t0.CHNL_TYPE_CD c1, t0.WORKFLOW_NAME c2, t0.INFO_SYSTEM_TYPE_CD c3, t0.FOLDER_NAME c4 from ETL_WORKFLOW t0 order by name limit 11

问题是...... Teradata 确实对 LIMIT 一无所知 是否有可能找到实现/覆盖某些东西并使底层 ORM 与 Teradata 一起工作?

更新: 似乎我必须对这些类做一些事情: http://www.avaje.org/static/javadoc/pub/index.html 我正在寻找样品: 1.为ebean设置适当的SQL方言或使其在SQL ANSI模式下工作。 2. 覆盖 ebean 的类并编写自己的 LIMIT 功能实现。

【问题讨论】:

  • 你试过使用 SELECT TOP 11 吗?
  • 我正在使用这样的构造:return find.orderBy(sortBy + " " + order) .findPagingList(pageSize) .getPage(page);它确实会生成问题中提到的查询。我正在寻找一种使用“特殊”限制来阻止 EBEAN 并使用更通用的方法。
  • 获取最新版本的 ebean.jar 现在是 2.7.7 sourceforge.net/projects/ebeanorm/files

标签: sql playframework-2.0 teradata ebean dialect


【解决方案1】:

Teradata 在您的SELECT 语句中同时支持TOP n 运算符和SAMPLE 子句。 TOP n 是 ANSI SQL 2008 标准的扩展,与您正在寻找的 LIMIT n 运算符最接近。

TOP n 在您的 SELECT 语句中的所有其他子句都得到满足后处理。它是使用 QUALIFY ROW_NUMBER()QUALIFY RANK() 窗口聚合来完成相同任务的功能替代,提供窗口聚合函数的最差等效性能。

SAMPLE 允许您在单个结果中返回多个样本集,从而为您提供了一些额外的灵活性。它也可以用于结果集中的简单随机样本。鉴于 SAMPLE 提供的选项,您最好参阅 Teradata 的 SQL 数据操作语言手册了解所有详细信息。 Teradata 手册可从here 下载。只需选择您要下载手册的 Teradata 版本即可。

编辑: 使用 Ebean 的 RawSQL 功能,您可以在 SQL 中显式使用 SAMPLETOP n 运算符,并且不允许 Ebean 自动添加表达式,例如 LIMIT OFFSET 子句。您是否尝试过这种方法?

【讨论】:

  • 感谢您的回复 Rob。好像我没有正确解释我需要什么。现在我将 play2 与 JPA+TeradataDialect 一起使用。我想找到一种使用 Teradata 方言/ANSI 支持来实现 ebean ORM 的方法。现在它不能开箱即用。默认情况下,ebean 生成对 Teradata DB 无效的 SQL 查询。
猜你喜欢
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
相关资源
最近更新 更多