java 帮助我在 JPA 中选择查询时遇到问题

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/327487/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-29 11:58:36  来源:igfitidea点击:

Help I have problem with select query in JPA

javajpa

提问by ferdinand

i have problem i want to

我有问题,我想

select name_magazine from magazine

从杂志中选择 name_magazine

and i already import all library needed

我已经导入了所有需要的库

and

Query q = EntityManger.createQuery ("SELECT name_magazine FROM Magazine");

List results = (List) q.getResultList ();

For(Sting s : result)

System.out.println(s);

Query q = EntityManger.createQuery("SELECT name_magazine FROM Magazine");

列表结果 = (List) q.getResultList();

For(Sting s : 结果)

System.out.println(s);

but when i run this code it's error. can someone help me? Thx

但是当我运行这段代码时,它是错误的。有人能帮我吗?谢谢

this the error when i run the program

这是我运行程序时的错误

Exception in thread "AWT-EventQueue-0" java.lang.Error: java.lang.reflect.InvocationTargetException at org.jdesktop.application.ApplicationAction.actionFailed(ApplicationAction.java:859) at org.jdesktop.application.ApplicationAction.noProxyActionPerformed(ApplicationAction.java:665) at org.jdesktop.application.ApplicationAction.actionPerformed(ApplicationAction.java:698) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.AbstractButton.doClick(AbstractButton.java:357) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1261) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) at java.awt.Component.processMouseEvent(Component.java:6041) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5806) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4413) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jdesktop.application.ApplicationAction.noProxyActionPerformed(ApplicationAction.java:662) ... 29 more Caused by: java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:209) at tugas_rpl.Tugas_RPLView.Iseng(Tugas_RPLView.java:734) ... 34 more Caused by: Exception [TOPLINK-8034] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.EJBQLException Exception Description: Error compiling the query [Select m.Name from magazine m]. Unknown abstract schema type [magazine]. at oracle.toplink.essentials.exceptions.EJBQLException.unknownAbstractSchemaType(EJBQLException.java:494) at oracle.toplink.essentials.internal.parsing.ParseTreeContext.classForSchemaName(ParseTreeContext.java:163) at oracle.toplink.essentials.internal.parsing.VariableNode.resolveClass(VariableNode.java:280) at oracle.toplink.essentials.internal.parsing.DotNode.resolveMapping(DotNode.java:254) at oracle.toplink.essentials.internal.parsing.DotNode.endsWithDirectToField(DotNode.java:213) at oracle.toplink.essentials.internal.parsing.SelectNode.selectingDirectToField(SelectNode.java:440) at oracle.toplink.essentials.internal.parsing.SelectNode.hasOneToOneSelected(SelectNode.java:265) at oracle.toplink.essentials.internal.parsing.SelectNode.hasOneToOneSelected(SelectNode.java:222) at oracle.toplink.essentials.internal.parsing.SelectGenerationContext.computeUseParallelExpressions(SelectGenerationContext.java:105) at oracle.toplink.essentials.internal.parsing.SelectGenerationContext.(SelectGenerationContext.java:88) at oracle.toplink.essentials.internal.parsing.ParseTree.buildContextForReadQuery(ParseTree.java:382) at oracle.toplink.essentials.internal.parsing.ParseTree.buildContext(ParseTree.java:370) at oracle.toplink.essentials.internal.parsing.EJBQLParseTree.buildContext(EJBQLParseTree.java:68) at oracle.toplink.essentials.internal.parsing.EJBQLParseTree.populateQuery(EJBQLParseTree.java:107) at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:219) at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:189) at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:153) at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.(EJBQueryImpl.java:114) at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.(EJBQueryImpl.java:99) at oracle.toplink.essentials.internal.ejb.cmp3.EJBQueryImpl.(EJBQueryImpl.java:86) at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:204) ... 35 more

线程“AWT-EventQueue-0”中的异常 java.lang.Error: java.lang.reflect.InvocationTargetException at org.jdesktop.application.ApplicationAction.actionFailed(ApplicationAction.java:859) at org.jdesktop.application.ApplicationAction.noProxyActionPerformed (ApplicationAction.java:665) 在 org.jdesktop.application.ApplicationAction.actionPerformed(ApplicationAction.java:698) 在 javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 在 javax.swing.AbstractButton$Handler.actionPerformed( AbstractButton.java:2318) 在 javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 在 javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 在 javax.swing.AbstractButton.doClick(AbstractButton.java:357) 在 javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1220) 在 javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1261) 在 java.awt.AWTReleased. (AWTEventMulticaster.java:272) 在 java.awt.Component.processMouseEvent(Component.java:6041) 在 javax.swing.JComponent.processMouseEvent(JComponent.java:3265) 在 java.awt.Component.processEvent(Component.java: 5806) 在 java.awt.Container.processEvent(Container.java:2058) 在 java.awt.Component.dispatchEventImpl(Component.java:4413) 在 java.awt.Container.dispatchEventImpl(Container.java:2116) 在 java。 awt.Component.dispatchEvent(Component.java:4243) 在 java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) 在 java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) 在 java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) 在 java.awt.Container.dispatchEventImpl(Container.java:2102) 在 java。 awt.Window.dispatchEventImpl(Window.java:2440) at java.awt.Component.dispatchEvent(Component.java:4243) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters (EventDispatchThread.java:273) 在 java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) 在 java.awt.EventDispatchThread.pumpEvents.java:EventDisp 168) 在 java.awt.EventDispatchThread。pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) 由:java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect。 NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.jdesktop.application.ApplicationAction .noProxyActionPerformed(ApplicationAction.java:662) ... 29 更多 原因:java.lang.IllegalArgumentException:在 EntityManager 中的 oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl) 中创建查询时发生异常.java:209) at tugas_rpl.Tugas_RPLView.Iseng(Tugas_RPLView.java:734) ... 34 导致:异常 [TOPLINK-8034] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007)) ): oracle.toplink.essentials.exceptions.EJBQLException 异常说明:编译查询时出错 [从杂志 m 中选择 m.Name]。未知的抽象模式类型 [杂志]。在 oracle.toplink.essentials.exceptions.EJBQLException.unknownAbstractSchemaType(EJBQLException.java:494) 在 oracle.toplink.essentials.internal.parsing.ParseTreeContext.classForSchemaName(ParseTreeContext.java:163) 在 oracle.toplink.essentials.internal. .VariableNode.resolveClass(VariableNode.java:280) at oracle.toplink.essentials.internal.parsing.DotNode.resolveMapping(DotNode.java:254) at oracle.toplink。Essentials.internal.parsing.DotNode.endsWithDirectToField(DotNode.java:213) at oracle.toplink.essentials.internal.parsing.SelectNode.selectingDirectToField(SelectNode.java:440) at oracle.toplink.essentials.internal.parsing.SelectNode。 hasOneToOneSelected(SelectNode.java:265) at oracle.toplink.essentials.internal.parsing.SelectNode.hasOneToOneSelected(SelectNode.java:222) at oracle.toplink.essentials.internal.parsing.SelectGenerationContext.computeUseParallelExpressions(SelectGenerationContext.java:105)在 oracle.toplink.essentials.internal.parsing.SelectGenerationContext.(SelectGenerationContext.java:88) 在 oracle.toplink.essentials.internal.parsing.ParseTree.buildContextForReadQuery(ParseTree.java:382) 在 oracle.toplink.essentials.internal。解析.ParseTree。buildContext(ParseTree.java:370) at oracle.toplink.essentials.internal.parsing.EJBQLParseTree.buildContext(EJBQLParseTree.java:68) at oracle.toplink.essentials.internal.parsing.EJBQLParseTree.populateQuery(EJBQLParseTree.populateQuery(EJBQLParse7Tree.java)在 oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:219) 在 oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery.java:219)在 oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.buildEJBQLDatabaseQuery(EJBQueryImpl.java:153) 在 oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.(EJBQueryImpl.java:153) 在:1 oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.(EJBQueryImpl.java:99) 在 oracle.toplink.essentials。internal.ejb.cmp3.EJBQueryImpl.(EJBQueryImpl.java:86) at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:204) ... 35 更多

I already try Vincent Ramdhanie,Guemundur Bjarni suggestion

我已经尝试过 Vincent Ramdhanie,Guemundur Bjarni 的建议

Query q = entityManager.createQuery("Select m.name from magazine m");

List result = (List) q.getResultList();

For(Sting s : result)

System.out.print(s);

Query q = entityManager.createQuery("从杂志m中选择m.name");

列表结果 = (List) q.getResultList();

For(Sting s : 结果)

System.out.print(s);

but still error

但仍然错误

this what library & variable i use

这是我使用的库和变量

private javax.persistence.EntityManager entityManager;

import org.jdesktop.application.Action;

import org.jdesktop.application.ResourceMap;

import org.jdesktop.application.SingleFrameApplication;

import org.jdesktop.application.FrameView;

import org.jdesktop.application.TaskMonitor;

import org.jdesktop.application.Task;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.ArrayList;

import java.util.List;

import javax.swing.Timer;

import javax.swing.Icon;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.event.ListSelectionEvent;

import javax.swing.event.ListSelectionListener;

import org.jdesktop.beansbinding.AbstractBindingListener;

import org.jdesktop.beansbinding.Binding;

import org.jdesktop.beansbinding.PropertyStateEvent;

import javax.persistence.*;

私有 javax.persistence.EntityManager entityManager;

导入 org.jdesktop.application.Action;

导入 org.jdesktop.application.ResourceMap;

导入 org.jdesktop.application.SingleFrameApplication;

导入 org.jdesktop.application.FrameView;

导入 org.jdesktop.application.TaskMonitor;

导入 org.jdesktop.application.Task;

导入 java.awt.event.ActionEvent;

导入 java.awt.event.ActionListener;

导入 java.util.ArrayList;

导入 java.util.List;

导入 javax.swing.Timer;

导入 javax.swing.Icon;

导入 javax.swing.JDialog;

导入 javax.swing.JFrame;

导入 javax.swing.event.ListSelectionEvent;

导入 javax.swing.event.ListSelectionListener;

导入 org.jdesktop.beansbinding.AbstractBindingListener;

导入 org.jdesktop.beansbinding.Binding;

导入 org.jdesktop.beansbinding.PropertyStateEvent;

导入 javax.persistence.*;

回答by Vincent Ramdhanie

You probably should say what the error is exactly.

您可能应该说出错误究竟是什么。

However, assuming that you have an entity Magazine then the query should be:

但是,假设您有一个实体 Magazine,那么查询应该是:

 select m from Magazine m

If you want all magazines.

如果你想要所有的杂志。

回答by Dan Vinton

The answer is right there in the call stack for your exception:

答案就在您的异常的调用堆栈中:

Error compiling the query [Select m.Jenis_Motor from motor m]. Unknown abstract schema type [motor].

It's not a problem with your magazine query, but another malformed query - probably a named query defined somewhere else.

这不是您的杂志查询的问题,而是另一个格式错误的查询 - 可能是在其他地方定义的命名查询。

回答by Carlos Cariello

Did you rename your class?

你重命名了你的班级吗?

The class name may differ from the name used in the named query

类名可能与命名查询中使用的名称不同

回答by Guemundur Bjarni

For this to work, you need an entity defined as such:

为此,您需要一个定义如下的实体:

@Entity
@Table(name = "magazines")
public class Magazine {
  /*
   * Some more attributes
   */

  @Column(name = "name_magazine")
  private String name;

  /*
   * Constructors, getters and setters
   */
}

Additionally you need a persistence.xml file pointing to your entity. If all of that is in place, this query should work and give you a list of all magazines.

此外,您需要一个指向实体的 persistence.xml 文件。如果所有这些都到位,此查询应该可以工作并为您提供所有杂志的列表。

from Magazine m

The query you specified is a projection of that, and with the entity I showed above it should be

您指定的查询是它的一个投影,我上面显示的实体应该是

select m.name from Magazine m 

Hope this helps. :)

希望这可以帮助。:)

回答by karan

If You are using JPA then in Query You need to write className and object as follows

如果您使用的是 JPA 那么在 Query 您需要编写 className 和 object 如下

Query q = EntityManger.createQuery ("SELECT name_magazine e FROM Magazine e");

e is an object of Magazine class. and if you facing this exception occurred while creating a query in EntityManager Check out your persistance.xml file you need to add class in this file after the persistence-unit tag

e 是 Magazine 类的对象。如果您在 EntityManager 中创建查询时遇到此异常,请查看您的 persistance.xml 文件,您需要在该文件中的 persistence-unit 标记之后添加类

<class>PackageName.className</class>