2017-03-09 11 views
0

注入をしようとすると、エラーが表示されます。 統合の例私はofficial siteから取った。 代わり"hibernate-entitymanagerの「私は"hibernate-core"を使用しかし、"hibernate-entitymanager"同じエラーでPlayFramework 2.5.12 JPAApi注入エラー

バージョン

休止コア - 。。5.2.8

プレイ - 2.5.12

1) Error injecting constructor, java.lang.NoSuchMethodError: org.hibernate.cfg.AnnotationBinder.bindDefaults(Lorg/hibernate/boot/spi/MetadataBuildingContext;)V 
    at play.db.jpa.DefaultJPAApi$JPAApiProvider.<init>(DefaultJPAApi.java:54) 
    at play.db.jpa.DefaultJPAApi$JPAApiProvider.class(DefaultJPAApi.java:35) 
    while locating play.db.jpa.DefaultJPAApi$JPAApiProvider 
    while locating play.db.jpa.JPAApi 
    for field at controllers.api.UsersApi.jpaApi(UsersApi.java:20) 
    at controllers.api.UsersApi.class(UsersApi.java:20) 
    while locating controllers.api.UsersApi 
    for field at controllers.api.ApiFe.usersApi(ApiFe.java:34) 
    while locating controllers.api.ApiFe 
    for parameter 27 at router.Routes.<init>(Routes.scala:136) 
    while locating router.Routes 
    while locating play.api.inject.RoutesProvider 
    while locating play.api.routing.Router 
    for parameter 0 at play.api.http.JavaCompatibleHttpRequestHandler.<init>(HttpRequestHandler.scala:200) 
    while locating play.api.http.JavaCompatibleHttpRequestHandler 
    while locating play.api.http.HttpRequestHandler 
    for parameter 4 at play.api.DefaultApplication.<init>(Application.scala:221) 
    at play.api.DefaultApplication.class(Application.scala:221) 
    while locating play.api.DefaultApplication 
    while locating play.api.Application 
    for parameter 0 at play.DefaultApplication.<init>(DefaultApplication.java:30) 
    at play.DefaultApplication.class(DefaultApplication.java:30) 
    while locating play.DefaultApplication 
    while locating play.Application 

1 error] 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:180) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:131) 
    at scala.Option.map(Option.scala:146) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:131) 
    at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:129) 

application.conf

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://dev-box-2:3306/localbase?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false" 
db.default.user=test 
db.default.password=test 
db.default.bonecp.logStatements=true 
db.default.bonecp.partitionCount=10 
db.default.bonecp.maxConnectionsPerPartition=10 
db.default.bonecp.minConnectionsPerPartition=1 
db.default.bonecp.connectionTimeout=3 seconds 

db.default.jndiName=DefaultDS 
jpa.default=defaultPersistenceUnit 

persistence.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" 
      version="2.1"> 

    <persistence-unit name="defaultPersistenceUnit" > 
     <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
     <non-jta-data-source>DefaultDS</non-jta-data-source> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> 
     </properties> 
    </persistence-unit> 

</persistence> 

build.sbt

libraryDependencies ++= Seq(
     javaJdbc, 
     javaJpa, 
     cache, 
     javaWs, 
     "org.hibernate" % "hibernate-core" % "5.2.8.Final", 
     ... 

クラス

@Singleton 
public class UsersApi implements Mappings { 

    @Inject 
    JPAApi jpaApi; 

    ... 
} 
+0

Playは、使用しているHibernateのバージョンにもう存在しないHibernateメソッドを呼び出しています。その結果、JPA APIを使用していると思われるときに、なぜ彼らが独自のメソッドを呼び出しているのかPlayに聞いてみましょう(あなたがそのようなことをする必要はないでしょう) –

答えて

0

私は@ごとのNIEL・ストックトンさんのコメントとして"org.hibernate" % "hibernate-entitymanager" % "5.2.8.Final"

で動作する最近のプロジェクトは、私が直接以下

package play.db.jpa; 

import play.db.DBApi; 
import play.inject.ApplicationLifecycle; 

import java.util.*; 
import java.util.concurrent.CompletableFuture; 
import java.util.function.Function; 
import java.util.function.Supplier; 

import javax.inject.Inject; 
import javax.inject.Provider; 
import javax.inject.Singleton; 
import javax.persistence.*; 

/** 
* Default implementation of the JPA API. 
*/ 
public class DefaultJPAApi implements JPAApi { 

をhibernateを利用しDefaultJPAApiクラスで何かを参照してくださいいけないしているが、私の現在の構成です。私は

routesGenerator := InjectedRoutesGenerator 

scalaVersion := "2.11.8" 

libraryDependencies ++= Seq(
    "org.webjars" % "bootstrap" % "3.0.3", 
    javaJdbc, 
    javaJpa, 
    cache, 
    json, 
    javaWs, 
    "com.typesafe.play.modules" %% "play-modules-redis" % "2.5.0" exclude("redis.clients" ,"jedis"), 
    "redis.clients" % "jedis" % "2.9.0", 
    "org.hibernate" % "hibernate-entitymanager" % "5.2.8.Final", 
    "com.google.guava" % "guava" % "21.0", 
    "org.opensaml" % "opensaml" % "2.5.3" 
) 

マイapplication.confは私local-db.conf

application.confでOracleマッチングのための設定が含まれていbuild.sbt

DB

としてOracleを使用しています

​​

PlayframeworkデフォルトではHikariCPを使用しているため、以下の設定ションはHikariCP

ローカル-db.conf

evolutionplugin = disabled 

jpa { 
    default = devPersistenceUnit 
} 

db { 
    oracle { 
    # You can expose this datasource via JNDI if needed (Useful for JPA) 
    jndiName = LocalDevDS 
    # Set a connection's default autocommit setting 
    autocommit = true 
    hikaricp { 
     dataSourceClassName = oracle.jdbc.pool.OracleDataSource 

     dataSource { 
     serverName = ${DB_HOST} 
     user = ${DB_USER} 
     password = ${DB_PASS} 
     databaseName = ${DB_NAME} 
     portNumber = ${DB_PORT} 
     networkProtocol = tcp 
     driverType = thin 
     } 
     maximumPoolSize = 8 
     registerMbeans = true 
     # 15 minutes 
     maxLifetime = 450000 
     # 5 minutes 
     idleTimeout = 300000 
     connectionTimeout = 60000 
    } 
    } 
} 

local.confに適用されます

include "application.conf" 
include "local-db.conf" 

plugins.sbt

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.12") 

addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.1.1") 

**持続性。XML **ここでは、BoneCPを使用したい場合は、いくつかの構成変更がhttps://www.playframework.com/documentation/2.5.x/SettingsJDBC

play.db.pool=bonecp 
play.db.prototype.bonecp.maxConnectionsPerPartition = 50 

ごとに が必要とされている

<persistence-unit name="devPersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 
    <non-jta-data-source>LocalDevDS</non-jta-data-source> 
    <properties> 
    <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/> 
    <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> 

prototypeは、プールの設定に与えられたデフォルトの名前です。あなたは何でもそれを呼び出すことができます、私はoracle私の設定で

あなたの問題を解決することを望んでいると呼んでいます。