0

So I am trying to write data in my database (Derby) and I got this error. javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement

Admin.html

<form action="RegisterServlet" method="post">
<h2>Új tag regisztrálása</h2>
UserName: <input type="text" name="Regname"><br>
Password: <input type="password" name="Regpassword"><br>
FelhasznaloID: <input type="number" name="Regid"><br>
<input type="radio" name="tag" value="semtag" checked> SEMTAg<br>
  <input type="radio" name="tag" value="nemsemtag"> Nem SEMTag<br>
<input type="submit" value="Regisztráció"><br>

RegisterServlet.java

package com.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.services.CreateFelhasznalo;

/**
 * Servlet implementation class RegisterServlet
 */
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet implements Servlet {
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public RegisterServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    String foo= "semtag";
    String fooka="nemsemtag";
    PrintWriter out=response.getWriter();
    String name=request.getParameter("Regname");
    String password=request.getParameter("Regpassword");
    int regid=Integer.parseInt(request.getParameter("Regid"));
    String semtag=request.getParameter("tag");
    if(semtag.equals(foo))
        CreateFelhasznalo.NewFelhasznalo(regid, name, password, "I");
    if(semtag.equals(fooka))
        CreateFelhasznalo.NewFelhasznalo(regid, name, password, "N");
    out.println("Sikeres regisztráció!");
}

}

Felhasznalok.java

package com.entity;

import java.io.Serializable;
import javax.persistence.*;


/**
 * The persistent class for the FELHASZNALOK database table.
 * 
 */
@Entity
@NamedQuery(name="Felhasznalok.findAll", query="SELECT f FROM Felhasznalok f")
public class Felhasznalok implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.AUTO) 
private int felhid;

private String password;

private String semtag;

private String username;

public Felhasznalok() {
}

public int getFelhid() {
    return this.felhid;
}

public void setFelhid(int felhid) {
    this.felhid = felhid;
}

public String getPassword() {
    return this.password;
}

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

public String getSemtag() {
    return this.semtag;
}

public void setSemtag(String semtag) {
    this.semtag = semtag;
}

public String getUsername() {
    return this.username;
}

public void setUsername(String username) {
    this.username = username;
}
public String toString() {
      return "Felhasznalok [FelhID=" + felhid + ", UserName=" + username + ",Password=" + password + ", Semtag=" + semtag +  "]";
   }
}

CreateFelhasznalo.java

package com.services;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import com.entity.Felhasznalok;

public class CreateFelhasznalo {

   public static void main( String[ ] args ) {}

public static void NewFelhasznalo(int felhid,String username,String 
password,String semtag) {

  EntityManagerFactory emfactory = Persistence.createEntityManagerFactory( "Eclipselink_JPA" );

  EntityManager entitymanager = emfactory.createEntityManager( );
  entitymanager.getTransaction( ).begin( );

  Felhasznalok felhasznalo = new Felhasznalok( ); 
  felhasznalo.setFelhid( felhid );
  felhasznalo.setUsername( username );
  felhasznalo.setPassword( password );
  felhasznalo.setSemtag( semtag );

  entitymanager.merge( felhasznalo );
  entitymanager.getTransaction( ).commit( );

  entitymanager.close( );
  emfactory.close( );
   }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" 
version="2.5">
    <display-name>SEMeszkozkolcsonzo</display-name>
    <welcome-file-list>
    <welcome-file>login.html</welcome-file>
   </welcome-file-list>
  <servlet>
  <description></description>
 <display-name>FirstServlet</display-name>
 <servlet-name>FirstServlet</servlet-name>
 <servlet-class>com.servlets.LoginServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>FirstServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>SecondServlet</display-name>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>com.servlets.ProfileServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/ProfileServlet</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>LogoutServlet</display-name>
<servlet-name>LogoutServlet</servlet-name>
<servlet-class>com.servlets.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/LogoutServlet</url-pattern>
 </servlet-mapping>
 <servlet>
<description></description>
<display-name>ToolServlet</display-name>
<servlet-name>ToolServlet</servlet-name>
<servlet-class>com.servlets.ToolServlet</servlet-class>
</servlet>
 <servlet-mapping>
<servlet-name>ToolServlet</servlet-name>
<url-pattern>/ToolServlet</url-pattern>
 </servlet-mapping>
<servlet>
<description></description>
<display-name>KolcsServlet</display-name>
<servlet-name>KolcsServlet</servlet-name>
<servlet-class>com.servlets.KolcsServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>KolcsServlet</servlet-name>
<url-pattern>/KolcsServlet</url-pattern>
 </servlet-mapping>
 <servlet>
<description></description>
<display-name>FelhServlet</display-name>
<servlet-name>FelhServlet</servlet-name>
<servlet-class>com.servlets.FelhServlet</servlet-class>
 </servlet>
 <servlet-mapping>
<servlet-name>FelhServlet</servlet-name>
<url-pattern>/FelhServlet</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>RegisterServlet</display-name>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.servlets.RegisterServlet</servlet-class>
 </servlet>
 <servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/RegisterServlet</url-pattern>
 </servlet-mapping>
 <session-config>
<session-timeout>30</session-timeout>
 </session-config>
 </web-app>

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

   <persistence-unit name="Eclipselink_JPA" transaction-type="RESOURCE_LOCAL">
   <provider>org.hibernate.ejb.HibernatePersistence</provider>

  <class>com.entity.Felhasznalok</class>
  <class>com.entity.Eszkoz</class>
  <class>com.entity.Kolcsonzesek</class>
    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" />
        <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/sample;create=true" />
        <property name="javax.persistence.jdbc.password" value="app"/>
        <property name="javax.persistence.jdbc.user" value="app"/>
        <property name="eclipselink.logging.level" value="FINE"/>
        <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
        <property name="eclipselink.ddl-generation.output-mode" value="database" />
    </properties>
</persistence-unit>

</persistence>

Error log

javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement
    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.merge(AbstractEntityManagerImpl.java:1171)
    at com.services.CreateFelhasznalo.NewFelhasznalo(CreateFelhasznalo.java:25)
    at com.servlets.RegisterServlet.doPost(RegisterServlet.java:45)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    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 org.wildfly.extension.undertow.deployment.GlobalRequestControllerHandler.handleRequest(GlobalRequestControllerHandler.java:68)
    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 org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1508)
    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:326)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:812)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:72)
    at org.hibernate.id.enhanced.SequenceStructure$1.getNextValue(SequenceStructure.java:94)
    at org.hibernate.id.enhanced.NoopOptimizer.generate(NoopOptimizer.java:40)
    at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:412)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:105)
    at org.hibernate.jpa.event.internal.core.JpaMergeEventListener.saveWithGeneratedId(JpaMergeEventListener.java:56)
    at org.hibernate.event.internal.DefaultMergeEventListener.saveTransientEntity(DefaultMergeEventListener.java:254)
    at org.hibernate.event.internal.DefaultMergeEventListener.entityIsTransient(DefaultMergeEventListener.java:234)
    at org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:300)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:169)
    at org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:68)
    at org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:843)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:825)
    at org.hibernate.internal.SessionImpl.merge(SessionImpl.java:830)
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1161)
    ... 43 more
Caused by: java.sql.SQLSyntaxErrorException: SEQUENCE 'APP.HIBERNATE_SEQUENCE' nem létezik.
    at org.apache.derby.client.am.SQLExceptionFactory.getSQLException(Unknown Source)
    at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
    at org.apache.derby.client.am.ClientConnection.prepareStatement(Unknown Source)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$1.doPrepare(StatementPreparerImpl.java:87)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:172)
    ... 58 more
Caused by: ERROR 42X94: SEQUENCE 'APP.HIBERNATE_SEQUENCE' nem létezik.
    at org.apache.derby.client.am.ClientStatement.completeSqlca(Unknown Source)
    at org.apache.derby.client.net.NetStatementReply.parsePrepareError(Unknown Source)
    at org.apache.derby.client.net.NetStatementReply.parsePRPSQLSTTreply(Unknown Source)
    at org.apache.derby.client.net.NetStatementReply.readPrepareDescribeOutput(Unknown Source)
    at org.apache.derby.client.net.StatementReply.readPrepareDescribeOutput(Unknown Source)
    at org.apache.derby.client.net.NetStatement.readPrepareDescribeOutput_(Unknown Source)
    at org.apache.derby.client.am.ClientStatement.readPrepareDescribeOutput(Unknown Source)
    at org.apache.derby.client.am.ClientPreparedStatement.readPrepareDescribeInputOutput(Unknown Source)
    at org.apache.derby.client.am.ClientPreparedStatement.flowPrepareDescribeInputOutput(Unknown Source)
    at org.apache.derby.client.am.ClientPreparedStatement.prepare(Unknown Source)
    at org.apache.derby.client.am.ClientConnection.prepareStatementX(Unknown Source)
    ... 61 more

I am using derby 10.2, Wildfly 11 and eclipse for my project. I have the database set up. It's a basic webapp where you can borrow tools , and I have problems with this admin interface where I want to add new user to the database. When I run the app, it can connect to the database but in the CreateFelhasznalo.java at the method entitymanager.merge( felhasznalo ); it just throws exception. Any tips for a beginner?

UPDATE:

When I run it locally as a java application, and I give in the data,it works perfectly.

I think somewhere I attach the entity but I don't know why.

Process:

At the login page I give the username and password and I check those in my database if those are correct and if he is an admin, I start a session with the login name( in my case it's Admin), and I open the admin console next. If he is not an admin the user cannot access this admin console, and I have no problem with that part.

My problem comes when I want to register a new user,I have a html form where I can add username and password and check if he is an admin, After te servlet connects to the database and ads it with JPA, This is where my problem starts because the error log states that the entity is detached when I use entitymanager.persist( felhasznalo ) and javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement when I use entitymanager.merge( felhasznalo )

Any guesses where did I go wrong?

Cœur
  • 37,241
  • 25
  • 195
  • 267
huistbor
  • 83
  • 1
  • 5
  • full exception stack trace has many important informations, for example lines No – Jacek Cz Dec 12 '17 at 13:39
  • I added the full one.Is that the one you asked? – huistbor Dec 12 '17 at 13:44
  • It would be helpful if you could include just enough to reproduce the problem. See: [How to create a Minimal, Complete, and Verifiable example](https://stackoverflow.com/help/mcve) – JonathanDavidArndt Dec 12 '17 at 13:50
  • As I understand You sholud use persist() and not merge(). Google many articles when and why use one or second. BTW stancktrace show some extra read activity during merge(), https://stackoverflow.com/questions/1069992/jpa-entitymanager-why-use-persist-over-merge – Jacek Cz Dec 12 '17 at 13:55
  • When I used persist() it threw an error like this javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist And on other pages they recommmended using merge() – huistbor Dec 12 '17 at 13:59
  • Okay I solved it. Can you see this line "@GeneratedValue(strategy = GenerationType.AUTO)" at Felhasznalok.java? That was the error – huistbor Dec 14 '17 at 21:14

0 Answers0