【问题标题】:Can one make Eclipse's "JPA Details" view's Query textbox bigger?可以使 Eclipse 的“JPA 详细信息”视图的查询文本框更大吗?
【发布时间】:2012-07-16 23:06:16
【问题描述】:

我花了很长时间才弄清楚如何让 JPQL 自动完成以在 eclipse 中工作。 我能看到的唯一地方是添加一个 到我的 persistence.xml 和映射 .xml 文件中,我可以定义一个 。然后,如果我添加“JPA 详细信息”视图并选择要编辑的查询,我会得到一个很小的 ​​4 行文本框 我必须在其中编辑我的查询。只有在这个小文本框中,我才能获得内容帮助。

A) 有没有办法让这个文本框变大? (我的查询很复杂,我需要更多的行)

B) 还有其他更大的地方可以获得 JPQL 内容协助吗?

(我在 Indigo 3.7 和 Juno 4.2 中遇到了同样的问题)

【问题讨论】:

    标签: eclipse jpa jpql dali


    【解决方案1】:

    内容助手也可以通过@NamedQuery 注解获得。如果您将配置存储在 XML 文件中或在 Entity 类上使用注释没有区别,那么您可以利用后者。一旦您开始编辑 @NamedQuery 的“查询”元素,就可以使用与 JPA 详细信息/查询中相同的内容助手。它给你足够的空间;但是,由于它是在 Java 代码中定义的字符串常量,因此在查询拆分为多行的情况下,您必须处理额外的引号和连接。同时,您将能够在 JPA 详细信息视图中查看此查询。

    至于 JPA Details 视图,我怀疑这个 Query 编辑框是否可配置,除非修改插件源并重新构建。

    编辑回应评论 (3),- 这是一个“方向”:

    • JPA 详细信息视图以及在 org.eclipse.jpt.jpa.ui 插件中定义的面板/窗格
    • 命名查询编辑视图在类 NamedQueryPropertyCompositeNamedQueryProperty2_0Composite 中相应地为 JPA v1 和 JPA v2 定义。
    • 将命名查询编辑框调整为4行的代码片段,如下所示:

      adjustMultiLineTextLayout(
          4,
          provider.getStyledText(),
          provider.getStyledText().getLineHeight()
      );
      

    .. 其中 4 是行数。

    可以在此处找到源::pserver:anonymous@dev.eclipse.org:/cvsroot/webtools(不确定它们针对的是哪个特定的 Eclipse 版本,但这绝对比 Indigo 的版本更新)。

    【讨论】:

    • 1) Eclipse 坚持将我的命名查询保留在一行中 2) 我将它放在 xml 文件中以避免所有引号 3) 是的,我认为我需要修改源代码,也许有人可以指出我正确的方向。 4)经过所有努力,我意识到我的查询无论如何都非常复杂,以至于 eclipse 插件无法理解它们(Hibernate 运行它们很好,但 IDE 说有错误)。
    • 确实,当查询分成多行时,Eclipse 似乎无法再解析查询了。
    • @AmanicA:让我知道它是如何进行的。使用匹配的版本,它应该像检查这个插件一样简单(它将使用您的 Eclipse 作为目标平台)。 CVS中这个插件的路径是/org.eclipse.jpa/components/jpa/plugins/org.eclipse.jpt.jpa.ui
    【解决方案2】:

    我已经针对 Dali Eclipse 项目输入了一个错误,以使该文本区域更大并扩展它。修复后无需破解。

    https://bugs.eclipse.org/bugs/show_bug.cgi?id=386416

    作为对评论 (4) 的回应 - 请针对您在复杂查询中看到的特定验证错误输入针对 Dali 的错误。如果它们是符合规范的 JPQL 查询,我们肯定要修复它们。如果它们包含任何特定于休眠的内容,休眠工具扩展将负责该验证。

    【讨论】:

    • 我认为它应该是可配置的,以便开发人员可以根据他或她的平均查询来更改它。将其添加为问题评论。
    • Karen 据我所知,它符合规范,我认为我的问题在于嵌套查询,例如。 SELECT NEW pkg.TableMetadata(table_oir , (SELECT pi.value FROM table_oir.propertyInstances pi WHERE pi.property.name = 'x') , description_pi.value ) FROM ObjectInstanceRevision table_oir, IN (table_oir.propertyInstances) description_pi WHERE table_oir.objectInstance。 objectClass.objectClassId = 'y'
    • Karen 我发现了一个简洁的 maven/jpa 技巧,这确实让 Dali 哭泣是可以理解的:我在我的映射文件中使用了 maven 属性(来自 pom.xml),这些属性由 maven 进行了预处理。通过这种方式,我从查询中删除了很多内容,例如。 SELECT NEW ${lsods-source}TableMetadata((SELECT pi.value FROM table_oir.propertyInstances pi WHERE pi.property.name = ${LsodsMetadata}TABLE_NAME) ) FROM ObjectInstanceRevision table_oir WHERE table_oir.objectInstance.objectClass.objectClassId = ${LsodsMetadata} OBJECT_CLASS_ID__TABLE
    • 很酷的把戏,但我不认为会添加对这些 maven 属性的支持,因为我们没有 maven 处理引擎:)。如果您愿意,您可以关闭 Dali JPQL 查询验证(在首选项->JPA->错误/警告-> 查询和生成器 -> '无效或不完整的 JPQL 查询'可以设置为忽略)。那么你不必移除JPA facet,仍然可以获得其他Dali代码辅助、验证、UI等
    • @AmanicA 您可能在 jpql 解析器中遇到了一个已修复的错误。我创建了一个对象模型,我认为它与您的复杂嵌套查询示例相匹配,并且在 Juno 中没有验证错误。我还没有找到相应的错误,所以我不确定它是在哪里修复的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多