Vaadin EntityManager - createQuery 不起作用?
Posted
技术标签:
【中文标题】Vaadin EntityManager - createQuery 不起作用?【英文标题】:Vaadin EntityManager - createQuery don't work ? 【发布时间】:2015-11-24 14:46:02 【问题描述】:大家好,所以我在 Vaadin / GWT 中迈出了第一步,我发现也许我没有得到一些受其规则或其他东西的机制。首先我的修改是在仪表板演示上完成的,你可以在这里查看 -> https://github.com/vaadin/dashboard-demo
我正在尝试从我的数据库中获取一些数据。我在 Spring 项目中经常使用 JPA,所以我正确配置了所有内容,但只是为了确保这是我的 persistence.xml:
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 版本="2.0">
<persistence-unit name="transactionUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/testDb?UseUnicode=true&characterEncoding=utf8" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="root" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="create" />
</properties>
</persistence-unit>
我还有一些超级简单的用户类:
@Entity(name = "USERS")
public class UserImpl implements User, java.io.Serializable
/**
*
*/
private static final long serialVersionUID = -7872836283108223143L;
@Id
@Column(name = "USER_ID")
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@Column(name = "USERNAME", unique = true)
protected String username;
@Column(name = "FIRST_NAME")
protected String firstName;
@Column(name = "LAST_NAME")
protected String lastName;
@Column(name = "EMAIL")
protected String email;
@Column(name = "PHONE_NUMBER")
protected String phoneNumber;
@Column(name = "PASSWORD")
protected String password;
@Column(name = "ENABLED")
protected boolean active;
@Override
public Long getId()
return id;
@Override
public void setId(Long id)
this.id = id;
@Override
public String getUsername()
return username;
@Override
public void setUsername(String username)
this.username = username;
@Override
public String getPassword()
return password;
@Override
public void setPassword(String password)
this.password = password;
@Override
public boolean isActive()
return active;
@Override
public void setActive(boolean active)
this.active = active;
@Override
public String getFirstName()
return firstName;
@Override
public void setFirstName(String firstName)
this.firstName = firstName;
@Override
public String getLastName()
return lastName;
@Override
public void setLastName(String lastName)
this.lastName = lastName;
@Override
public String getEmail()
return email;
@Override
public void setEmail(String email)
this.email = email;
@Override
public String getPhoneNumber()
return phoneNumber;
@Override
public void setPhoneNumber(String phoneNumber)
this.phoneNumber = phoneNumber;
并且要指出我有这样的方法(也容易 UBER):
@Subscribe
public void userLoginRequested(final UserLoginRequestedEvent event)
EntityManager em = Persistence
.createEntityManagerFactory("transactionUnit")
.createEntityManager();
TypedQuery<com.vaadin.demo.dashboard.domain.classes.UserImpl> query = em.createQuery("SELECT user FROM com.vaadin.demo.dashboard.domain.classes.UserImpl user WHERE LOWER(username) = :username", com.vaadin.demo.dashboard.domain.classes.UserImpl.class);
com.vaadin.demo.dashboard.domain.classes.UserImpl testUser;
testUser = query.getSingleResult();
User user = getDataProvider().authenticate(event.getUserName(),
event.getPassword());
VaadinSession.getCurrent().setAttribute(User.class.getName(), user);;
方法应该是简单的返回对象但没有我有这样的错误:
【EL信息】:2015-11-24 15:43:16.62--ServerSession(1650623529)--EclipseLink,版本:Eclipse 持久性服务 - 2.2.0.v20110202-r8913 [EL 信息]:2015-11-24 15:43:16.797--ServerSession(1650623529)--file:/D:/Serwery/apache-tomcat-8.0.15/webapps/ROOT/WEB-INF/classes/_transactionUnit 登录成功 lis 24, 2015 3:43:16 PM com.vaadin.server.DefaultErrorHandler doDefault 严重: java.lang.NoSuchMethodError: javax.persistence.EntityManager.createQuery(Ljava/lang/String;Ljava/lang/Class;)Ljavax/persistence/TypedQuery; 在 com.vaadin.demo.dashboard.DashboardUI.userLoginRequested(DashboardUI.java:103) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 com.google.common.eventbus.EventSubscriber.handleEvent(EventSubscriber.java:74) 在 com.google.common.eventbus.SynchronizedEventSubscriber.handleEvent(SynchronizedEventSubscriber.java:47) 在 com.google.common.eventbus.EventBus.dispatch(EventBus.java:322) 在 com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:304) 在 com.google.common.eventbus.EventBus.post(EventBus.java:275) 在 com.vaadin.demo.dashboard.event.DashboardEventBus.post(DashboardEventBus.java:17) 在 com.vaadin.demo.dashboard.view.LoginView$1.buttonClick(LoginView.java:102) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:508) 在 com.vaadin.event.EventRouter.fireEvent(EventRouter.java:198) 在 com.vaadin.event.EventRouter.fireEvent(EventRouter.java:161) 在 com.vaadin.server.AbstractClientConnector.fireEvent(AbstractClientConnector.java:1003) 在 com.vaadin.ui.Button.fireClick(Button.java:393) 在 com.vaadin.ui.Button$1.click(Button.java:61) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:497) 在 com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:158) 在 com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118) 在 com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:313) 在 com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:202) 在 com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:95) 在 com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:41) 在 com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1408) 在 com.vaadin.server.VaadinServlet.service(VaadinServlet.java:351) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 在 org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) 在 org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745)
问题是我的方法有什么问题?
【问题讨论】:
【参考方案1】:您的类路径中是否有正确的 java 持久性版本?
您尝试调用的 createQuery
方法自 2.0 版起首次可用
/**
* @since Java Persistence 2.0
*/
public <T> TypedQuery<T> createQuery(CriteriaQuery<T> criteriaQuery);
如果您使用 maven,请执行以下操作:
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>javax.persistence</artifactId>
<version>2.1.0</version>
</dependency>
不喜欢:
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
【讨论】:
以上是关于Vaadin EntityManager - createQuery 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
使用Vaadin的maven archetype创建一个空Vaadin项目