我在我的项目中使用Spring Boot 1.4.2以及Hibernate和JPA。我使用IntelliJ Community 2016.2.4,和我的同事一样。不同之处在于,当他在HQL中输入内容时(即@Query(“SELECT id FROM usesrs”))它会根据真实的数据库结构自动检查表名 - 没有“使用者”表,但是有一个“用户”表所以他的项目不会编译,除非他纠正它 - 这是一个多么美妙的功能!有时我需要花很多时间来发现这些错误......
你能告诉我如何在IntelliJ中启用它吗?我尝试了什么:
1)当我转到Preferences / Editor / Language injections / "+" sign / Java Parameter
时,我没有在列表中看到SQL,也没有谈到HQL(但是JQL是疯狂的......)。无论如何看起来我想要启用比纯语法检查更深层次的东西,它必须检查数据库结构。
2)当我去File / Project structure / Facets / "+" sign
时,我没有看到JPA,只有一些Android选项和Java-Gradle。
这里有什么建议吗?
答案 0 :(得分:2)
Ultimate版本支持不幸的JPA / Hibernate功能。
IDEA有语言注入,它可以将一种语言(例如SQL,RegExp,XML,HTML,CSS等)注入代码中的字符串文字中,从而获得编辑该文字时的综合编码帮助。
您可以在here
获得帮助Using language injections in SQL和提示答案 1 :(得分:1)
在数据库视图中是您的数据源设置吗?
如果尚未显示,请转到查看 - >工具Windows - >数据库
您应该会看到连接的数据源。
如果不存在,则需要使用+ - >进行设置。 "数据源"然后选择您使用的数据库并设置连接。
完成此操作后,或者如果已经存在数据库连接,您将要使用"刷新"来同步数据源。在数据库视图中查找图标。
然后单击更多模式并选择您使用的模式,并点击同步。 Intellij现在应该知道DB和你的表结构。
希望它可以自动检查您的查询,除非有其他不妥之处。
答案 2 :(得分:1)
关于这个主题的三个结论:
1)正如@Liping Huang指出的那样,实时检查(我想错误的高位)仅限于终极版
2)我更深入地研究了这个问题,看起来我实际上已经对此有一些基本的支持,但我只是忽略了隐藏在堆栈中较低的错误信息。在社区中我必须尝试运行应用程序,因此没有实时突出显示。然后,如果表名中有错误,则消息将在堆栈跟踪中。
以下是示例,请注意“Usesrs未映射”消息:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'protectedController': Unsatisfied dependency expressed through field 'userRepository'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userRepositoryImpl': Unsatisfied dependency expressed through field 'userRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract void com.ekinnolab.database.repository.user.userRepository.setAsDeletedById(java.lang.Long)!
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:592) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.4.RELEASE.jar:4.3.4.RELEASE]
(…)
// cutting out 150 about lines
(...)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:240) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1894) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:291) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final]
... 69 common frames omitted
HERE ==> Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Usesrs is not mapped
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:171) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:91) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:76) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:321) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3687) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3576) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:716) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.updateStatement(HqlSqlBaseWalker.java:373) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:265) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:262) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:190) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final]
... 77 common frames omitted
3)BTW,对于纯SQL,有一些有趣的插件。只需转到IntelliJ IDEA / Preferences / Plugins / Browse repositories
。 “SQL查询插件”是那些看起来很有希望的人之一。