我正在嘗試玩框架和使用2.2.0版本和Java版本。MySQL PersistenceException,「連接已關閉」在Play! 2.2
我想使用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的情況下,您可能只是簡單地錯過了與底層表的連接,請看這個示例:http://www.avaje.org/ebean/getstarted_props.html – Ashalynd
您是否曾經解決過這個問題?有類似的問題......奇怪地調用Ebean.update(obj)的作品(直到我做了更復雜的事情),但Ebean.save(obj)從來沒有。鬱悶了。 – chris
所以我解決了這個問題。切換到JPA(看起來ebean可能會很快移動到外部包),並且不僅獲得了連接關閉錯誤,而且還因爲SQL錯誤而導致(先前)錯誤。如果我將ebean配置爲向控制檯輸出錯誤(不確定如何執行此操作),我會發現它--SQL錯誤發生器,並且連接因此被關閉。可能想要檢查這是否也是你正在發生的事情。 – chris