Hibernate异常之命名查询节点未找到

Posted 李昭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate异常之命名查询节点未找到相关的知识,希望对你有一定的参考价值。

异常信息:

 1 java.lang.IllegalArgumentException: No query defined for that name [salaryEmps]
 2     at org.hibernate.internal.AbstractSharedSessionContract.getNamedQuery(AbstractSharedSessionContract.java:578)
 3     at org.hibernate.internal.AbstractSharedSessionContract.getNamedQuery(AbstractSharedSessionContract.java:103)
 4     at pw.fengya.test.TestHibernate.testNamedQuery(TestHibernate.java:59)
 5     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 6     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 7     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 8     at java.lang.reflect.Method.invoke(Method.java:483)
 9     at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)
10     at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
11     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:167)
12     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$201/5021240.execute(Unknown Source)
13     at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
14     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:163)
15     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:110)
16     at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:57)
17     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:83)
18     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$133/1144648478.execute(Unknown Source)
19     at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
20     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
21     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
22     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$136/1681595665.accept(Unknown Source)
23     at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
24     at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
25     at java.util.Iterator.forEachRemaining(Iterator.java:116)
26     at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
27     at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
28     at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
29     at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
30     at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
31     at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
32     at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
33     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
34     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$133/1144648478.execute(Unknown Source)
35     at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
36     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
37     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$null$2(HierarchicalTestExecutor.java:92)
38     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$136/1681595665.accept(Unknown Source)
39     at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
40     at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)
41     at java.util.Iterator.forEachRemaining(Iterator.java:116)
42     at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
43     at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:512)
44     at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:502)
45     at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
46     at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
47     at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
48     at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
49     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.lambda$execute$3(HierarchicalTestExecutor.java:92)
50     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$$Lambda$133/1144648478.execute(Unknown Source)
51     at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
52     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:77)
53     at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:51)
54     at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:43)
55     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:170)
56     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:154)
57     at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:90)
58     at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:86)
59     at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
60     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
61     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
62     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
63     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
64     Suppressed: org.hibernate.TransactionException: Transaction was marked for rollback only; cannot commit
65         at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:228)
66         at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:68)
67         at pw.fengya.test.TestHibernate.destory(TestHibernate.java:48)
68         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
69         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
70         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
71         at java.lang.reflect.Method.invoke(Method.java:483)
72         at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:389)
73         at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
74         at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.invokeMethodInExtensionContext(ClassTestDescriptor.java:289)
75         at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.lambda$synthesizeAfterEachMethodAdapter$12(ClassTestDescriptor.java:281)
76         at org.junit.jupiter.engine.descriptor.ClassTestDescriptor$$Lambda$156/644166178.invokeAfterEachMethod(Unknown Source)
77         at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$null$9(TestMethodTestDescriptor.java:208)
78         at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$205/1991386317.execute(Unknown Source)
79         at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
80         at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:226)
81         at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor$$Lambda$203/1393112209.accept(Unknown Source)
82         at java.util.ArrayList.forEach(ArrayList.java:1234)
83         at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:224)
84         at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachMethods(TestMethodTestDescriptor.java:207)
85         at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:114)
86         ... 48 more

学习Hibernate的命名查询时突然抛出异常,最后检查是由于自己太粗心了,query节点应该放在class节点外,与之同级

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 
 5 <hibernate-mapping package="pw.fengya.bean">
 6 
 7     <class name="Employee" table="t_EMPLOYEE">
 8 
 9         <id name="id" type="java.lang.Integer">
10             <column name="ID" />
11             <generator class="native" />
12         </id>
13 
14         <property name="name" type="java.lang.String">
15             <column name="NAME" />
16         </property>
17 
18         <property name="salary" type="float">
19             <column name="SALARY" />
20         </property>
21 
22         <property name="email" type="java.lang.String">
23             <column name="EMAIL" />
24         </property>
25 
26         <many-to-one name="dept" class="Deptartment" fetch="select">
27             <column name="DEPT_ID" />
28         </many-to-one>
29     
30         <query name="salaryEmps"><![CDATA[FROM Employee e WHERE e.salary > :minSal AND e.salary < :maxSal]]></query>
31     </class>
32 
33 </hibernate-mapping>

将query标签拿出来,与class同级即可

以上是关于Hibernate异常之命名查询节点未找到的主要内容,如果未能解决你的问题,请参考以下文章

Java:如何解决 Hibernate 查询语言中的类未映射异常?

java类定义未找到异常

Hibernate命名查询

Hibernate 5:使用命名查询和无状态会话返回 java.lang.UnsupportedOperationException

Hibernate - 自定义查询未通过 ManyToOne 单向关系的 child 参数找到实体

Hibernate中带有命名查询的可选参数?