[英]Playframework 2.3.x JAVA + JPA + MySQL
I am using playframework 2.3.x and Java. 我正在使用playframework 2.3.x和Java。 For my project i would like to connect with mysql and used JPA, the connection work fine (i think) but when i try to create an model user i have this error : 对于我的项目,我想与mysql连接并使用JPA,连接工作正常(我认为),但是当我尝试创建模型用户时,出现以下错误:
[error] C:\Users\lpiroche\Documents\www\play_framework\play_sample1\modules\core
\app\models\User.java:3: error: package javax.persistence does not exist
[error] import javax.persistence.Column;
[error] ^
[error] C:\Users\lpiroche\Documents\www\play_framework\play_sample1\modules\core
\app\models\User.java:4: error: package javax.persistence does not exist
[error] import javax.persistence.Entity;
[error] ^
[error] C:\Users\lpiroche\Documents\www\play_framework\play_sample1\modules\core
\app\models\User.java:5: error: package javax.persistence does not exist
[error] import javax.persistence.GeneratedValue;
[error] ^
[error] C:\Users\lpiroche\Documents\www\play_framework\play_sample1\modules\core
\app\models\User.java:6: error: package javax.persistence does not exist
[error] import javax.persistence.GenerationType;
[error] ^
[error] C:\Users\lpiroche\Documents\www\play_framework\play_sample1\modules\core
\app\models\User.java:7: error: package javax.persistence does not exist
[error] import javax.persistence.*;
[error] ^
[error] C:\Users\lpiroche\Documents\www\play_framework\play_sample1\modules\core
\app\models\User.java:9: error: cannot find symbol
[error] @Entity
[error] ^
[error] symbol: class Entity
[error] C:\Users\lpiroche\Documents\www\play_framework\play_sample1\modules\core
\app\models\User.java:10: error: cannot find symbol
[error] @Table(name="users")
The play documentation is poor in example to connect to mysql database, i read tuto, post but i don't find a solution. 播放文档在连接到mysql数据库的示例中很差,我读了tuto,发表了文章,但是我没有找到解决方案。 i think i forget something in the persistence.xml file but i don't know what. 我想我忘记了persistence.xml文件中的某些内容,但我不知道是什么。
build.sbt build.sbt
libraryDependencies ++= Seq(
javaJdbc,
cache,
javaWs,
javaJpa,
"org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final",
"mysql" % "mysql-connector-java" % "5.1.18"
)
application.conf application.conf
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/mydb"
db.default.user=root
db.default.password=""
db.default.jndiName=DefaultDS
jpa.default=defaultPersistenceUnit
persistence.xml persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="defaultPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>DefaultDS</non-jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"></property>
<property name="hibernate.format_sql" value="true"></property>
</properties>
</persistence-unit>
</persistence>
In the examples i find differentes configurations : 在示例中,我找到了不同的配置:
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"></property>
<property name="hibernate.format_sql" value="true"></property>
or 要么
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
I don't know which one is the most appropriate 我不知道哪一个最合适
i found my problem. 我发现了我的问题。 Maybe an another person could met a similar issue so i will explain it. 也许另一个人可能遇到类似的问题,所以我会解释。
My project is divided in 3 subprojects : core, common, subproject1 for example 我的项目分为3个子项目:例如core,common,subproject1
common depends on core and subproject1 depends on common. common取决于核心,subproject1取决于common。 My main project(root) depends on common and subproject1 and agregate them 我的主项目(根)取决于common和subproject1并将它们汇总
build.sbt build.sbt
name := "sample"
version := "1.0"
libraryDependencies ++= Seq(
javaJdbc,
cache,
javaWs,
javaJpa,
"org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final",
"mysql" % "mysql-connector-java" % "5.1.18"
)
lazy val root = (project in file(".")).enablePlugins(PlayJava)
.aggregate(common, subproject1 )
.dependsOn(common, subproject1 )
lazy val core = (project in file("modules/core")).enablePlugins(PlayJava)
lazy val common = (project in file("modules/common")).enablePlugins(PlayJava).dependsOn(core)
lazy val subproject1 = (project in file("modules/subproject1 ")).enablePlugins(PlayJava).dependsOn(common)
The problem appear when a try to create my User class in the core subproject (package core.app.models.datas), apparently as core is not aggregate directly in my root project the javax.persistence package are not imported. 当尝试在核心子项目(包core.app.models.datas)中创建我的User类时出现问题,显然是因为核心没有直接聚集在我的根项目中,所以没有导入javax.persistence包。 If i create a User class in common or subproject1 i have no problem. 如果我在common或subproject1中创建一个User类,我没有问题。
To fix the problem i create a build.sbt file with the good dependencies : 为了解决这个问题,我创建了一个具有良好依赖关系的build.sbt文件:
.../core/build.sbt ... /核心/build.sbt
name := "core"
version := "1.0"
libraryDependencies ++= Seq(
javaJdbc,
cache,
javaWs,
javaJpa,
"org.hibernate" % "hibernate-entitymanager" % "3.6.9.Final",
"mysql" % "mysql-connector-java" % "5.1.18"
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.