2017-02-15 15 views
0

Итак, у меня есть компания, я имею ошибку при каждом добавлении компании. Я использую PostgreSQL для моей базы данных, и я использую литералы двойных кавычек для сопоставления столбцов таблицы в паскальде.Имя столбца X не найдено в этом ResultSet - JPA

лицо Компания:

@Entity 
@XmlRootElement 
public class Company { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name="\"Id\"") 
    private Long id; 
    @Column(name="\"Name\"") 
    private String name; 
    public Long getId() { 
     return id; 
    } 
    public void setId(Long id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 

Компания Endpoint:

@Stateless 
@Path("/companies") 
public class CompanyEndpoint { 
    @PersistenceContext(unitName = "primary") 
    private EntityManager em; 

    @POST 
    @Consumes("application/json") 
    public Response create(Company entity) { 
     em.persist(entity); 
     return Response.created(
       UriBuilder.fromResource(CompanyEndpoint.class) 
         .path(String.valueOf(entity.getId())).build()).build(); 
    } 

    @DELETE 
    @Path("/{id:[0-9][0-9]*}") 
    public Response deleteById(@PathParam("id") Long id) { 
     Company entity = em.find(Company.class, id); 
     if (entity == null) { 
      return Response.status(Status.NOT_FOUND).build(); 
     } 
     em.remove(entity); 
     return Response.noContent().build(); 
    } 

    @GET 
    @Path("/{id:[0-9][0-9]*}") 
    @Produces("application/json") 
    public Response findById(@PathParam("id") Long id) { 
     TypedQuery<Company> findByIdQuery = em 
       .createQuery(
         "SELECT DISTINCT c FROM Company c WHERE c.id = :entityId ORDER BY c.id", 
         Company.class); 
     findByIdQuery.setParameter("entityId", id); 
     Company entity; 
     try { 
      entity = findByIdQuery.getSingleResult(); 
     } catch (NoResultException nre) { 
      entity = null; 
     } 
     if (entity == null) { 
      return Response.status(Status.NOT_FOUND).build(); 
     } 
     return Response.ok(entity).build(); 
    } 

    @GET 
    @Produces("application/json") 
    public List<Company> listAll(@QueryParam("start") Integer startPosition, 
      @QueryParam("max") Integer maxResult) { 
     TypedQuery<Company> findAllQuery = em 
       .createQuery("SELECT DISTINCT c FROM Company c ORDER BY c.id", 
         Company.class); 
     if (startPosition != null) { 
      findAllQuery.setFirstResult(startPosition); 
     } 
     if (maxResult != null) { 
      findAllQuery.setMaxResults(maxResult); 
     } 
     final List<Company> results = findAllQuery.getResultList(); 
     return results; 
    } 

    @PUT 
    @Path("/{id:[0-9][0-9]*}") 
    @Consumes("application/json") 
    public Response update(@PathParam("id") Long id, Company entity) { 
     if (entity == null) { 
      return Response.status(Status.BAD_REQUEST).build(); 
     } 
     if (id == null) { 
      return Response.status(Status.BAD_REQUEST).build(); 
     } 
     if (!id.equals(entity.getId())) { 
      return Response.status(Status.CONFLICT).entity(entity).build(); 
     } 
     if (em.find(Company.class, id) == null) { 
      return Response.status(Status.NOT_FOUND).build(); 
     } 
     try { 
      entity = em.merge(entity); 
     } catch (OptimisticLockException e) { 
      return Response.status(Response.Status.CONFLICT) 
        .entity(e.getEntity()).build(); 
     } 

     return Response.noContent().build(); 
    } 
} 

Последнее, что я вижу это org.postgresql.util.PSQLException: The column name "Id" was not found in this ResultSet.

Может кто-то объяснить, что неправильно в моем коде. Заранее спасибо.

Полный журнал Sever:

2017-02-09 13:37:40,650 ERROR [io.undertow.request] (default task-15) UT005023: Exception handling request to /test/rest/companies: org.jboss.resteasy.spi.UnhandledException: javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not insert: [test.model.Company] 

    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.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not insert: [test.model.Company] 

    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:187) 

    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277) 

    at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:327) 

    at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:47) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:100) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.deployment.processors.StartupAwaitInterceptor.processInvocation(StartupAwaitInterceptor.java:22) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:67) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356) 

    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:636) 

    at org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356) 

    at org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 

    at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:198) 

    at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:185) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 

    at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73) 

    at org.jboss.tools.examples.rest.CompanyEndpoint$$$view398.create(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: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not insert: [test.model.Company] 

    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692) 

    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602) 

    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608) 

    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1152) 

    at org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:580) 

    at org.jboss.tools.examples.rest.CompanyEndpoint.create(CompanyEndpoint.java:37) 

    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.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437) 

    at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82) 

    at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93) 

    at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437) 

    at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64) 

    at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) 

    at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51) 

    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340) 

    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275) 

    ... 87 more 

Caused by: org.hibernate.exception.SQLGrammarException: could not insert: [test.model.Company] 

    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:106) 

    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) 

    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109) 

    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:49) 

    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2803) 

    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3374) 

    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81) 

    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:619) 

    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:273) 

    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:254) 

    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:299) 

    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:317) 

    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:272) 

    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:178) 

    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:109) 

    at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:67) 

    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:189) 

    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:132) 

    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:58) 

    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:775) 

    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:748) 

    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:753) 

    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1146) 

    ... 118 more 

Caused by: org.postgresql.util.PSQLException: The column name "Id" was not found in this ResultSet. 

    at org.postgresql.jdbc.PgResultSet.findColumn(PgResultSet.java:2591) 

    at org.postgresql.jdbc.PgResultSet.getLong(PgResultSet.java:2489) 

    at org.jboss.jca.adapters.jdbc.WrappedResultSet.getLong(WrappedResultSet.java:1583) 

    at org.hibernate.id.IdentifierGeneratorHelper.get(IdentifierGeneratorHelper.java:138) 

    at org.hibernate.id.IdentifierGeneratorHelper.getGeneratedIdentity(IdentifierGeneratorHelper.java:73) 

    at org.hibernate.dialect.identity.GetGeneratedKeysDelegate.executeAndExtract(GetGeneratedKeysDelegate.java:61) 

    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:42) 

    ... 137 more 
+0

Вы можете заключить, что PostgreSQL DEFAULTS в «нижнем регистровом» названии столбцов, ЕСЛИ ВЫ НЕ ОТМЕТЬТЕ ИХ. Некоторые поставщики JPA предоставляют удобную настройку для автоматической подписи для вас. –

+0

Просто не помещайте кавычки вокруг имен столбцов. –

ответ

0

Я считаю, что ваша программа ищет колонку под названием 'Id "', вместо 'Id'. Вы должны изменить свою аннотацию таким образом.

@Column(name="Id") 
private Long id; 
+0

Спасибо, но это ваш ответ не то, что я ищу, это создает столбцы в нижнем регистре не в PascalCase CREATE TABLE test.company ( идентификатор bigserial NOT NULL, варьируя имя персонажа (255), CONSTRAINT company_pkey PRIMARY KEY (id) ) – netto

+0

Я никогда не использовал postgres и не сталкивался с проблемами с прописными или строчными операторами sql. Может быть, эта ссылка поможет вам: http://stackoverflow.com/questions/32165694/spring-hibernate-5-naming-strategy-configuration – jaysee

+0

jaysee - спасибо Я реализовал стратегию именования в паскальде, но все же у меня ошибка «Имя столбца« Id »не было найдено в этом ResultSet« во время вставки в db. – netto