【发布时间】:2013-09-30 18:44:02
【问题描述】:
我正在试用 Play 框架并使用 2.2.0 版本和 Java 版本。
我想使用 MySQL 作为数据库,我已按照网站上的说明进行操作。我能够运行进化脚本,但我无法将任何内容保存到数据库中。在数据库中创建的表。我在尝试调用 Ebean.save() 方法时得到了[PersistenceException: java.sql.SQLException: Connection is closed!],该方法位于我的控制器中。
我所做的是:
-
设置 build.sbt 并添加插件
libraryDependencies ++= Seq( javaJdbc, javaEbean, cache, "mysql" % "mysql-connector-java" % "5.1.18" ) -
设置 conf/application.conf
db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://localhost:3306/TLC?characterEncoding=UTF-8" db.default.user=root db.default.pass=secret -
Ebean 服务器
ebean.default="models.*" -
创建的控制器类 包控制器;
import com.avaje.ebean.Ebean; import play.*; import play.data.Form; import play.mvc.*; import models.Bar; import views.html.*; public class Application extends Controller { public static Result index() { return ok(index.render("Your new application is ready.")); } public static Result addBar() { Bar bar = Form.form(Bar.class).bindFromRequest().get(); bar.save(); return redirect(routes.Application.index()); } } -
创建表单
<form action="@routes.Application.addBar()" method="post"> <input name="name"/> <input type="submit"/> </form> -
添加路线
POST /bars controllers.Application.addBar() -
当然是模型本身。 封装模型;
import play.db.ebean.Model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class Bar extends Model { @Id public String id; public String name; } 当然还有在 mysql 中创建数据库本身。
我错过了什么?我已经做了 4 个小时了,仍然不知道出了什么问题。如果我在内存数据库中使用 h2,它工作得很好。请帮帮我。
谢谢!
【问题讨论】:
-
您必须在数据库会话中执行与数据库相关的事情。根据您的描述,当您尝试保存对象时,似乎没有活动会话(或者您没有使用它)。在 EBean API 的情况下,您可能只是缺少与基础表的连接,请看这个示例:avaje.org/ebean/getstarted_props.html
-
你解决过这个问题吗?有类似的问题......奇怪的是调用 Ebean.update(obj) 工作(直到我做一些更复杂的事情),但 Ebean.save(obj) 从来没有。令人抓狂。
-
所以我最终解决了这个问题。切换到 JPA(似乎 ebean 可能很快会移动到外部包)并且不仅收到连接关闭错误,而且由于 SQL 错误而导致(先前)错误。如果我将 ebean 配置为向控制台输出错误(不确定当前如何执行此操作),我会发现它 - 发生 SQL 错误,因此连接被关闭。可能想检查您是否也遇到了这种情况。
标签: java mysql sql playframework ebean