我正在尝试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,它的工作正常。请帮帮我。
谢谢!
答案 0 :(得分:2)
我有类似的问题,我找到了解决方案。
罪魁祸首是id
实体的Bar
属性。您已将id
定义为String,并且在保存Bar
时未设置它。如果Long
,则会自动生成id值,但对于String,您需要明确设置它。
所以,
Bar bar = Form.form(Bar.class).bindFromRequest().get();
bar.id = UUID.randomUUID().toString();
bar.save();
应该解决这个问题。希望这会有所帮助。
答案 1 :(得分:0)
您可能尝试的一件事是升级mysql连接器。你正在使用的那个有点旧(2011年4月发布)
“mysql”%“mysql-connector-java”%“5.1.26”
如果这没有帮助,那么我会尝试确保凭据+连接URL是正确的。
答案 2 :(得分:0)
我遇到了同样的问题(在使用MySQL的Mac OS X上),但我没有使用String ID
User {
@Id
public long id;
public String fullName;
}
当我尝试时:
Ebean.save(user)
我得到了:
[PersistenceException:java.sql.SQLException:Connection已关闭!]
使用自动增量策略并更新mysql连接器对我没有帮助。
问题是尝试在字段中编写unicode,因为没有Unicode一切正常。 仔细观察,结果发现MySQL数据库是在没有utf8_general_ci的情况下创建的,但是在现有数据库上使用ALTER添加此属性不起作用。
使用默认排序规则 utf8_general_ci 创建一个新数据库,为我工作。
答案 3 :(得分:0)
有时它可能是一个非空的&#39;插入期间跳过的列。在我的情况下,我添加了一个新的&#39; int&#39;输入&#39; not null&#39;并忘了为它们插入值。希望它可以帮助一些人。