주입하려고하면 오류가 발생합니다. 통합 예제 나는 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",
...
클래스
,691,363@Singleton
public class UsersApi implements Mappings {
@Inject
JPAApi jpaApi;
...
}
그래서 Play는 사용중인 Hibernate의 버전에 더 이상 존재하지 않는 Hibernate 메소드를 호출합니다. 결과적으로 Play에게 JPA API를 사용한다고 주장 할 때 독점적 인 메소드를 호출하는 이유 (여기서 그런 일은 할 필요가 없습니다) –