5

私は Play フレームワークを試しており、2.2.0 バージョンと Java バージョンを使用しています。

MySQL をデータベースとして使用したいので、サイトの指示に従いました。進化スクリプトを実行できますが、データベースに何も保存できません。データベースに作成されたテーブル。[PersistenceException: java.sql.SQLException: Connection is closed!]コントローラーにある Ebean.save() メソッドを呼び出そうとしたときに取得しました。

私がやったことは次のとおりです。

  1. build.sbt をセットアップし、プラグインを追加

    libraryDependencies ++= Seq(
        javaJdbc,
        javaEbean,
        cache,
        "mysql" % "mysql-connector-java" % "5.1.18"
    )
    
  2. 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
    
  3. イービーンサーバー

    ebean.default="models.*"
    
  4. コントローラー クラス パッケージ コントローラーを作成しました。

    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());
        }
    }
    
  5. フォームを作成しました

    <form action="@routes.Application.addBar()" method="post">
        <input name="name"/>
        <input type="submit"/>
    </form>
    
  6. ルートを追加しました

    POST    /bars                       controllers.Application.addBar()
    
  7. もちろん模型そのもの。パッケージ モデル;

    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;
    
    }
    
  8. そしてもちろん、mysql でデータベース自体を作成します。

私は何を取りこぼしたか?私はこれを4時間ほど使用していますが、何が問題なのかまだわかりません。メモリデータベースで h2 を使用した場合、問題なく動作します。私を助けてください。

ありがとう!

4

4 に答える 4

2

同様の問題があり、解決策を見つけました。

犯人はidあなたのBarエンティティの所有物です。を文字列として定義しましたがid、保存中に設定していませんBar。のLong場合、id 値は自動的に生成されますが、String の場合は明示的に設定する必要があります。

それで、

Bar bar = Form.form(Bar.class).bindFromRequest().get();
bar.id = UUID.randomUUID().toString();
bar.save();

この問題を解決する必要があります。お役に立てれば。

于 2014-02-23T06:11:01.793 に答える
0

場合によっては、挿入中にスキップされた 'not null' 列である可能性があります。私の場合、「not null」で「int」タイプの新しい列を追加しましたが、それらの値を挿入するのを忘れていました。それが誰かを助けることを願っています。

于 2015-02-03T09:28:09.197 に答える
0

試すことができることの 1 つは、mysql コネクタをアップグレードすることです。使用しているものは少し古いです (2011 年 4 月にリリースされました)。

"mysql" % "mysql-connector-java" % "5.1.26"

それでも問題が解決しない場合は、資格情報と接続 URL が正しいことを確認してみてください。

于 2013-10-26T22:05:18.327 に答える
0

私は同じ問題を抱えていました (Mac OS X で MySQL を使用) が、文字列 ID を使用していません。

 User {
     @Id
     public long id;
     public String fullName;    
 }

私が試したとき:

Ebean.save(user) 

私が得た:

[PersistenceException: java.sql.SQLException: 接続が閉じられました!]

自動インクリメント戦略を使用し、mysql コネクタを更新しても役に立ちませんでした。

問題は、Unicode がなくてもすべてが機能したため、フィールドに Unicode を書き込もうとしたことです。よく調べてみると、MySQL データベースは utf8_general_ci なしで作成されていることがわかりましたが、既存のデータベースで ALTER を使用してこのプロパティを追加しても機能しません。

デフォルトの照合utf8_general_ciで新しいデータベースを作成すると、うまくいきました。

于 2014-08-01T00:50:54.357 に答える