我似乎无法找出问题所在。
在使用播放框架CRUD模块将信息插入数据库(mySql)时
(我正在使用默认的模块插入机制,如http://www.playframework.org/documentation/1.0.1/crud所示)
我收到以下异常


  发生PersistenceException:
  org.hibernate.exception.GenericJDBCException:无法插入:
  [models.mail]


在{module:crud} /app/controllers/CRUD.java中(第152行)

             } catch (TemplateNotFoundException e) {
                 render("CRUD/blank.html", type, object);
             }

          }

  Here -> object._save();
          flash.success(play.i18n.Messages.get("crud.created", type.modelName));
         if (params.get("_save") != null) {
             redirect(request.controller + ".list");
          }
          if (params.get("_saveAndAddAnother") != null) {

         redirect(req

uest.controller + ".blank");


这是我的邮件实体类:

@Entity
public class Mail extends Model {


   public String title;

   public Date sentAt;
   @OneToMany
   public Set<User> sentTO;
   @OneToMany
   public Set<User> sentBCC;


    public String content;

    @ManyToOne
    public User author;

    public Mail(User author, ... ){

      //more code here
    }

}


控制者

package controllers;

/**
 *
 * @author mike
 */
public class Mails extends CRUD{

}


[全栈]


  执行异常(在{module:crud} /app/controllers/CRUD.java中
  第152行)发生了PersistenceException:
  org.hibernate.exception.GenericJDBCException:无法插入:
  [models.mail]
  
  play.exceptions.JavaExecutionException:
  org.hibernate.exception.GenericJDBCException:无法插入:
  [models.Mail]位于
  在以下位置播放play.mvc.ActionInvoker.invoke(ActionInvoker.java:231)
  Invocation.HTTP Request(Play!)由以下原因引起:
  javax.persistence.PersistenceException:
  org.hibernate.exception.GenericJDBCException:无法插入:
  [models.Mail]位于
  org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1214)
    在
  org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1147)
    在
  org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1153)
    在
  org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:678)
    在play.db.jpa.JPABase._save(JPABase.java:25)处
  controllers.CRUD.create(CRUD.java:152)在
  play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)
    在play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)处
  play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478)
    在
  play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)
    在play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)...还有1个
  引起原因:org.hibernate.exception.GenericJDBCException:无法
  插入:[models.Mail]位于
  org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
    在
  org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
    在
  org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    在
  org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
    在
  org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2345)
    在
  org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2852)
    在
  org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
    在org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)处
  org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:320)
    在
  org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
    在
  org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
    在
  org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69)
    在
  org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179)
    在
  org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
    在
  org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
    在org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:808)
    在org.hibernate.impl.SessionImpl.persist(SessionImpl.java:782)处
  org.hibernate.impl.SessionImpl.persist(SessionImpl.java:786)在
  org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:672)
    ... 8更多原因:java.sql.SQLException:字段“ isAdmin”没有
  的默认值为
  com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)在
  com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593)在
  com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525)在
  com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986)在
  com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140)位于
  com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)在
  com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111)
    在
  com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2407)
    在
  com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2325)
    在
  com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2310)
    在
  org.hibernate.id.IdentityGenerator $ GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
    在
  org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
    ...另外23个


有任何想法吗?

最佳答案

查看实际原因

Caused by: java.sql.SQLException: Field 'isAdmin' doesn't have a default value


看起来您试图在不设置isAdmin属性的情况下保存到行中(该属性也未在模型中定义,但可能在您的实际数据库中?)。

10-05 17:51
查看更多