5

computer-database-jpa (Java) Play Framework 2.1 サンプル アプリケーションで遊んでいます。H2 in memory データベースを使用している場合はすべて正常に動作しますが、アプリケーションを MySQL に接続するときに問題が発生しました。

一部の人は同じ問題を抱えていました (サンプル アプリを MySQL に接続する必要がありました) が、解決策はありませんでした。

追加しましたmysql-connector(Build.scala):

val appDependencies = Seq(
  ....
  "mysql" % "mysql-connector-java" % "5.1.18"
)

および編集されたapplication.conf:

db.default.url="jdbc:mysql://password:user@localhost/my-database"
db.default.driver=com.mysql.jdbc.Driver

アプリケーションを起動して 1.sql (進化スクリプト) を適用すると、エラーが発生します。

You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'sequence company_seq
start with 1000' at line 1 [ERROR:1064, SQLSTATE:42000]

問題を解決する方法を知っている人はいますか?

4

1 に答える 1

8

私は解決策を見つけました - https://github.com/opensas/openshift-play2-computerdb

進化スクリプトで使用される構文は、以下に準拠していませんMySQL:

コンピューター データベースのサンプル アプリを H2 から mysql に移植するために必要な変更のリスト

conf/evolutions/default/1.sql

  • 参照整合性を有効にするために、engine=innodb を追加しました
  • id フィールドのシーケンスを自動インクリメントに置き換えました
  • 「SET REFERENTIAL_INTEGRITY」コマンドを「SET FOREIGN_KEY_CHECKS」に置き換えました
  • タイムスタンプ フィールドを日時に置き換えました

conf/evolutions/default/2.sql

  • 2.sql ファイルと 3.sql ファイルの間でコンピューター データを分割しました (mysql で実行されている進化のバグを回避します)。

モデル/Models.scala

  • Computer.list SQLクエリから「nulls last」を削除しました
  • id フィールドをスキップするように Computer.insert を変更しました (mysql によって自動割り当てされるため)

Javaバージョンではなく、ファイルで遊んでいたのでScala、変更する必要がありました。注釈を追加しました:Company.javaComputer.java@GeneratedValue

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long id;

ここでは、変更された進化スクリプトを見つけることができます: https://github.com/opensas/openshift-play2-computerdb/tree/master/conf/evolutions/default

于 2013-04-03T11:56:13.247 に答える