2013-12-12 27 views
0

我試圖從類數據插入到數據庫playframework JPA.em()。merge(this); SQLGrammarException

這裏我的模型類

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方法給我的錯誤:

[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] 

所有我可以看到它讓我發現,列「MEDICALINC0 _._ EBEAN_INTERCEPT」找不到,這是非常明顯的原因,我真的dosnt在db中有該列。 我的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)) 
; 

或者我應該使用persist()方法?

回答

0

嘗試禁用EBean增強功能。在您的conf/application.conf文件中註釋掉ebean *的所有內容。也請按照您的build.sbt文件進行操作。

+0

我沒有conf/application.conf中的任何ebean條目 – masterdany88

+0

檢查我更新的答案。 –

+0

有沒有在ebean build.sbt – masterdany88

0

我已下載清潔播放zip。 並創建新的項目。 然後我把我的舊項目公開的dir應用程序配置放到新創建的項目中。 那些引起我現在得到一個錯誤:在沒有次數ebean的

[PersistenceException: org.hibernate.exception.ConstraintViolationException: could not insert: [models.MedicalIncident]] 


[info] play - datasource [jdbc:h2:mem:play] bound to JNDI as DefaultDS 
[info] play - database [default] connected at jdbc:h2:mem:play 
[info] play - Application started (Dev) 
[[Ljava.lang.Object;@39fa10a8, [Ljava.lang.Object;@505ba354] 
------------------------ 
--> - - <-- 
[email protected] 
Form(of=class models.MedicalIncident, data={id=3, incident_type=Skaleczono nożyczkami, unit=Chirurgii, age=15, month=Czerwiec, place=Place}, value=Some([email protected]), errors={}) 
------------------------ 
------------------------ 
[email protected] 
------------------------ 
[error] o.h.u.JDBCExceptionReporter - Pole nie moze byc puste "ID" 
NULL not allowed for column "ID"; SQL statement: 
insert into MedicalIncident (id, age, incident_type, month, place, unit) values (null, ?, ?, ?, ?, ?) [23502-172] 
[error] play - Cannot invoke the action, eventually got an error: javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not insert: [models.MedicalIncident] 
[error] application - 

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

play.api.Application$$anon$1: Execution exception[[PersistenceException: org.hibernate.exception.ConstraintViolationException: could not insert: [models.MedicalIncident]]] 
     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.ConstraintViolationException: could not insert: [models.MedicalIncident] 
     at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final] 
     at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1315) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final] 
     at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1321) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final] 
     at org.hibernate.ejb.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:860) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final] 
     at models.MedicalIncident.toDataBase(MedicalIncident.java:44) ~[na:na] 
     at controllers.MedicalIncidents.submit(MedicalIncidents.java:49) ~[na:na] 
Caused by: org.hibernate.exception.ConstraintViolationException: could not insert: [models.MedicalIncident] 
     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final] 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final] 
     at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final] 
     at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2345) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final] 
     at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2852) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final] 
     at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final] 
Caused by: org.h2.jdbc.JdbcSQLException: Pole nie moze byc puste "ID" 
NULL not allowed for column "ID"; SQL statement: 
insert into MedicalIncident (id, age, incident_type, month, place, unit) values (null, ?, ?, ?, ?, ?) [23502-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.table.Column.validateConvertUpdateSequence(Column.java:295) ~[h2.jar:1.3.172] 
     at org.h2.table.Table.validateConvertUpdateSequence(Table.java:699) ~[h2.jar:1.3.172] 
     at org.h2.command.dml.Insert.insertRows(Insert.java:122) ~[h2.jar:1.3.172] 

在此的錯誤。所以我認爲它解決了。