Próbuję grać w Play i używać wersji 2.2.0 i Java.MySQL PersistenceException, "Połączenie zostało zamknięte" w Play! 2.2
Chcę używać MySQL jako bazy danych i postępuję zgodnie z instrukcją na stronie. Mogę uruchomić skrypt ewolucyjny, ale nie mogę zapisać niczego w bazie danych. Tabela utworzona w bazie danych. Mam [PersistenceException: java.sql.SQLException: Connection is closed!]
podczas próby wywołania metody Ebean.save(), która jest w moim kontrolerze.
Co robiłem jest:
Konfigurowanie build.sbt i dodał wtyczki
libraryDependencies ++= Seq( javaJdbc, javaEbean, cache, "mysql" % "mysql-connector-java" % "5.1.18" )
Skonfiguruj 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
Serwer eBean
ebean.default="models.*"
Utworzono kontroler pakietów klasy ;
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()); } }
Utworzono formą
<form action="@routes.Application.addBar()" method="post"> <input name="name"/> <input type="submit"/> </form>
Dodane trasie
POST /bars controllers.Application.addBar()
Model sama oczywiście. modele pakietów;
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; }
I oczywiście tworzenie samej bazy danych w mysql.
Czego mi brakowało? Byłem w tym przez 4 godziny i wciąż nie mam pojęcia, co jest nie tak. Jeśli użyłem h2 w bazie danych pamięci, to działa dobrze. Proszę pomóż mi.
Dzięki!
Musisz robić rzeczy związane z DB w sesji DB. Z tego, co opisujesz, wynika, że nie ma aktywnej sesji (lub jej nie używasz) w momencie, gdy próbujesz zapisać swój obiekt. W przypadku EBean API może być po prostu brak połączenia z podstawową tabelą, spójrz na ten przykład: http://www.avaje.org/ebean/getstarted_props.html – Ashalynd
Czy kiedykolwiek rozwiązałeś to? Mając podobne problemy ... dziwnie nazywając Ebean.update (obj) działa (dopóki nie zrobię czegoś bardziej skomplikowanego), ale Ebean.save (obj) nigdy nie robi. Szalony. – chris
Rozwiązałem to z mojego powodu. Przełączono na JPA (wydaje się, że eBean może wkrótce zostać przeniesiony do zewnętrznego pakietu) i otrzymaliśmy nie tylko błąd zamknięcia połączenia, ale także (wcześniejszy) błąd z powodu błędu SQL. Gdybym skonfigurował ebean do wysyłania błędów do konsoli (nie wiem, jak to zrobić w tej chwili), przyłapałbym go - wystąpił błąd SQL, a połączenie zostało w rezultacie zamknięte. Może chcieć sprawdzić, czy to też się dzieje. – chris