执行load命令时出错:org.hibernate.exception.GenericJDBCException:无法准备语句

时间:2018-06-14 12:13:32

标签: java hibernate rest jpa

我创建了一个简单的web java应用程序,使用gradle作为构建工具,hibernate / JPA作为持久性框架,MySQL作为数据库。该项目成功构建,但是当我使用邮递员进行测试时遇到以下错误。顺便说一下,我的应用程序在Wildfly 8.xxx中运行,数据库模式是lm_db

请参阅以下内容:

19:18:41,451 INFO  [org.hibernate.event.internal.DefaultLoadEventListener] 
(default task-2) HHH000327: Error performing load command : 
org.hibernate.exception.GenericJDBCException: could not prepare statement
19:18:41,460 ERROR [io.undertow.request] (default task-2) UT005023: Exception 
handling request to /lm/rest/app/1: 
org.jboss.resteasy.spi.UnhandledException: 
javax.persistence.PersistenceException: 
org.hibernate.exception.GenericJDBCException: could not prepare statement
   at org.jboss.resteasy.core.ExceptionHandler.handleApplicationException(ExceptionHandler.java:77)
   at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:220)
   at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:175)
   at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:418)
   at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:209)
   at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:221)
   at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
   at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
   at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
   at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
   at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
   at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
   at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
   at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
   at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
   at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
   at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
   at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
   at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
   at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
   at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
   at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
   at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
   at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
   at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
   at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
   at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
   at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
   at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
   at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
   at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
   at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
   at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
   at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
   at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
   at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
   at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
   at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
   at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
   at java.lang.Thread.run(Thread.java:745)
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not prepare statement
   at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692)
   at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1619)
   at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1106)
   at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1033)
   at org.jboss.as.jpa.container.AbstractEntityManager.find(AbstractEntityManager.java:213)
   at com.ph.lm.dao.GenericDaoBean.findById(GenericDaoBean.java:57)
   at com.ph.lm.endpoint.AppEndpointBean.getUserById(AppEndpointBean.java:30)
   at com.ph.lm.endpoint.AppEndpointBean$Proxy$_$$_WeldClientProxy.getUserById(Unknown Source)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:498)
   at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:139)
   at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:295)
   at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:249)
   at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:236)
   at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:402)
   ... 43 more
Caused by: org.hibernate.exception.GenericJDBCException: could not prepare statement
   at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
   at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109)
   at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182)
   at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148)
   at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.prepareQueryStatement(AbstractLoadPlanBasedLoader.java:241)
   at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeQueryStatement(AbstractLoadPlanBasedLoader.java:185)
   at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:121)
   at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)
   at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.load(AbstractLoadPlanBasedEntityLoader.java:167)
   at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3967)
   at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:508)
   at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:478)
   at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219)
   at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:278)
   at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121)
   at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89)
   at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1129)
   at org.hibernate.internal.SessionImpl.access$2600(SessionImpl.java:164)
   at org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2696)
   at org.hibernate.internal.SessionImpl.get(SessionImpl.java:975)
   at org.hibernate.jpa.spi.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:1075)
   ... 57 more
Caused by: org.h2.jdbc.JdbcSQLException: Schema "LM_DB" not found; SQL statement:
select user0_.id as id1_1_0_, user0_.password as password2_1_0_, user0_.privilege_id as privileg4_1_0_, user0_.user_details_id as user_det5_1_0_, user0_.username as username3_1_0_ from lm_db.user user0_ where user0_.id=? [90079-173]
   at org.h2.message.DbException.getJdbcSQLException(DbException.java:331)
   at org.h2.message.DbException.get(DbException.java:171)
   at org.h2.message.DbException.get(DbException.java:148)
   at org.h2.command.Parser.getSchema(Parser.java:616)
   at org.h2.command.Parser.getSchema(Parser.java:623)
   at org.h2.command.Parser.readTableFilter(Parser.java:1075)
   at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1713)
   at org.h2.command.Parser.parseSelectSimple(Parser.java:1821)
   at org.h2.command.Parser.parseSelectSub(Parser.java:1707)
   at org.h2.command.Parser.parseSelectUnion(Parser.java:1550)
   at org.h2.command.Parser.parseSelect(Parser.java:1538)
   at org.h2.command.Parser.parsePrepared(Parser.java:405)
   at org.h2.command.Parser.parse(Parser.java:279)
   at org.h2.command.Parser.parse(Parser.java:251)
   at org.h2.command.Parser.prepareCommand(Parser.java:218)
   at org.h2.engine.Session.prepareLocal(Session.java:428)
   at org.h2.engine.Session.prepareCommand(Session.java:377)
   at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138)
   at org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:70)
   at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:644)
   at org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnection.doPrepareStatement(BaseWrapperManagedConnection.java:757)
   at org.jboss.jca.adapters.jdbc.BaseWrapperManagedConnection.prepareStatement(BaseWrapperManagedConnection.java:743)
   at org.jboss.jca.adapters.jdbc.WrappedConnection.prepareStatement(WrappedConnection.java:454)
   at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:146)
   at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
   ... 75 more

的persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_1_1.xsd"
version="1.1">

<persistence-unit name="lm_db_source" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <class>com.ph.lm.model.User</class>
    <class>com.ph.lm.model.UserDetails</class>
    <class>com.ph.lm.model.Privilege</class>
    <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3307/lm_db" />
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.user" value="root"/>
        <property name="javax.persistence.jdbc.password" value="1a0b1c6d0d6c1b3aA@"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="hibernate.enable_lazy_load_no_trans" value="true"/>
        <property name="hibernate.show_sql" value="false"/>
    </properties>
</persistence-unit>

User.java

@Entity
@Table(name = "user", catalog = "lm_db", 
uniqueConstraints = @UniqueConstraint(columnNames = {"privilege_id", "user_details_id"}))
public class User implements Serializable {

   private static final long serialVersionUID = 7751952716031714175L;

   private int id;
   private Privilege privilege;
   private UserDetails userDetails;
   private String username;
   private String password;

   public User() {}

   public User(Privilege privilege, UserDetails userDetails, String username, String password) {
       this.privilege = privilege;
       this.userDetails = userDetails;
       this.username = username;
       this.password = password;
   }

   @Id
   @GeneratedValue(strategy = IDENTITY)
   @Column(name = "id", unique = true, nullable = false)
   public int getId() {
       return this.id;
   }

   public void setId(int id) {
       this.id = id;
   }

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "privilege_id", unique = true)
   public Privilege getPrivilege() {
       return this.privilege;
   }

   public void setPrivilege(Privilege privilege) {
       this.privilege = privilege;
   }

   @ManyToOne(fetch = FetchType.LAZY)
   @JoinColumn(name = "user_details_id", unique = true)
   public UserDetails getUserDetails() {
       return this.userDetails;
   }

   public void setUserDetails(UserDetails userDetails) {
       this.userDetails = userDetails;
   }

   @Column(name = "username")
   public String getUsername() {
       return this.username;
   }

   public void setUsername(String username) {
       this.username = username;
   }

   @Column(name = "password")
   public String getPassword() {
       return this.password;
   }

   public void setPassword(String password) {
       this.password = password;
   }

}

摇篮

apply plugin: 'java'
apply plugin: 'war'

sourceCompatibility = 1.8
targetCompatibility = 1.8

sourceSets {
 main {
     resources {
        srcDir 'src/main/resource'
     }
 } 
}

repositories {
    jcenter()
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.21'
    compile 'javax.servlet:javax.servlet-api:4.0.1'
    compile 'javax.inject:javax.inject:1'
    compile 'com.google.code.gson:gson:2.8.5'
    compile 'mysql:mysql-connector-java:5.1.18'
    compile 'org.apache.logging.log4j:log4j-api:2.8'
    compile 'org.apache.logging.log4j:log4j-core:2.8'
    compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.8'
    compile 'org.slf4j:slf4j-api:1.7.7'
    providedCompile 'com.fasterxml.jackson.core:jackson-annotations:2.9.5'
    providedCompile 'org.jboss.resteasy:resteasy-jaxrs:2.2.1.GA'
    providedCompile 'org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final'
    providedCompile 'org.hibernate:hibernate-core:4.3.11.Final'
    testCompile 'junit:junit:4.12'
}

最后,

user table structure in MySQL

1 个答案:

答案 0 :(得分:0)

检查您的数据库网址。

我的问题是来自connecton H2 db的数据库URL。数据库URL可能是相同的问题。

spring.datasource.url=jdbc:h2:mem:testdb