Search code examples
hibernatejpamergeplayframework-2.2persist

playframework JPA.em().merge(this); SQLGrammarException


I am trying to insert data from class into db

here my model class

package models;

import java.util.*;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.validation.*;

import play.data.validation.Constraints;
import play.data.validation.Constraints.*;
import play.api.db.*;
import play.db.jpa.*;
import javax.persistence.EntityManager;

@Entity
public class MedicalIncident   {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public int id;

    @Constraints.Required
    public String month;

    @Constraints.Required
    public String place;

    @Constraints.Required
    public String unit;

    @Constraints.Required
    public String incident_type;

    @Constraints.Required
    public int age;



    /**
     * Insert this new incident submission.
     */
    public void toDataBase() {
        // persist object - add to entity manager
        JPA.em().merge(this);
        JPA.em().persist(this);
    }

}

.merge method gives me error:

[info] play - Application started (Dev)
[error] o.h.e.j.s.SqlExceptionHelper - Kolumna "MEDICALINC0_._EBEAN_INTERCEPT" nie istnieje
Column "MEDICALINC0_._EBEAN_INTERCEPT" not found; SQL statement:
select medicalinc0_.id as id1_0_0_, medicalinc0_._ebean_intercept as _ebean_i2_0_0_, medicalinc0_.age as age3_0_0_, medicalinc0_.incident_type as incident4_0_0_, medicalinc0_.month as month5_0_0_, medicalinc0_.place as place6_0_0_, medicalinc0_.unit as unit7_0_0_ from MedicalIncident medicalinc0_ where medicalinc0_.id=? [42122-172]
[error] play - Cannot invoke the action, eventually got an error: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement
[error] application - 

! @6ghb8od3o - Internal server error, for (POST) [/incydent_medyczny/zapisz] ->

play.api.Application$$anon$1: Execution exception[[PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement]]
        at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10.jar:2.2.1]
        at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10.jar:2.2.1]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
        at scala.Option.map(Option.scala:145) [scala-library.jar:na]
        at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not prepare statement
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387) ~[hibernate-entitymanager-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310) ~[hibernate-entitymanager-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1316) ~[hibernate-entitymanager-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:898) ~[hibernate-entitymanager-4.2.6.Final.jar:4.2.6.Final]
        at models.MedicalIncident.toDataBase(MedicalIncident.java:43) ~[na:na]
        at controllers.MedicalIncidents.submit(MedicalIncidents.java:50) ~[na:na]
Caused by: org.hibernate.exception.SQLGrammarException: could not prepare statement
        at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:188) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:159) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
        at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1859) ~[hibernate-core-4.2.6.Final.jar:4.2.6.Final]
Caused by: org.h2.jdbc.JdbcSQLException: Kolumna "MEDICALINC0_._EBEAN_INTERCEPT" nie istnieje
Column "MEDICALINC0_._EBEAN_INTERCEPT" not found; SQL statement:
select medicalinc0_.id as id1_0_0_, medicalinc0_._ebean_intercept as _ebean_i2_0_0_, medicalinc0_.age as age3_0_0_, medicalinc0_.incident_type as incident4_0_0_, medicalinc0_.month as month5_0_0_, medicalinc0_.place as place6_0_0_, medicalinc0_.unit as unit7_0_0_ from MedicalIncident medicalinc0_ where medicalinc0_.id=? [42122-172]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:329) ~[h2.jar:1.3.172]
        at org.h2.message.DbException.get(DbException.java:169) ~[h2.jar:1.3.172]
        at org.h2.message.DbException.get(DbException.java:146) ~[h2.jar:1.3.172]
        at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:144) ~[h2.jar:1.3.172]
        at org.h2.expression.Alias.optimize(Alias.java:52) ~[h2.jar:1.3.172]
        at org.h2.command.dml.Select.prepare(Select.java:808) ~[h2.jar:1.3.172]

All I can see it shows me that Column "MEDICALINC0_._EBEAN_INTERCEPT" not found which is quite obvious cause I really dosnt have that column in db. My db:

create table MedicalIncident (
  id                        bigint not null,
  month                      varchar(255),
  place                      varchar(255),
  unit                       varchar(255),
  incident_type              varchar(255),
  age                        bigint,
  constraint pk_MedicalIncident primary key (id))
;

Or should I use persist() method?


Solution

  • Try disabling the EBean enhancement. In your conf/application.conf file comment out everything you have with ebean*. Also do the same with your build.sbt file.