Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PlayFramework 2.5.12 JPAApi注入错误_Java_Hibernate_Jpa_Inject_Playframework 2.5 - Fatal编程技术网

Java PlayFramework 2.5.12 JPAApi注入错误

Java PlayFramework 2.5.12 JPAApi注入错误,java,hibernate,jpa,inject,playframework-2.5,Java,Hibernate,Jpa,Inject,Playframework 2.5,当我尝试注射时,我看到一个错误。 我从中得到的集成示例。 我使用的不是“hibernate entitymanager”,而是“hibernate core”。但是,使用“hibernate entitymanager”时会出现相同的错误 版本 @Singleton public class UsersApi implements Mappings { @Inject JPAApi jpaApi; ... } hibernate核心-5.2.8 播放-2.5.12

当我尝试注射时,我看到一个错误。 我从中得到的集成示例。 我使用的不是
“hibernate entitymanager”
,而是
“hibernate core”
。但是,使用
“hibernate entitymanager”
时会出现相同的错误

版本

@Singleton
public class UsersApi implements Mappings {

    @Inject
    JPAApi jpaApi;

    ...
}
hibernate核心-5.2.8

播放-2.5.12

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>
课程

@Singleton
public class UsersApi implements Mappings {

    @Inject
    JPAApi jpaApi;

    ...
}

我最近有一个项目与
“org.hibernate”%”hibernate entitymanager“%”5.2.8.Final“

根据@nielstockton的评论,我在DefaultJPAApi类中没有看到任何直接使用hibernate的东西

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 {
下面是我当前的配置。我使用Oracle作为数据库

构建.sbt

libraryDependencies ++= Seq(
      javaJdbc,
      javaJpa,
      cache,
      javaWs,
      "org.hibernate" % "hibernate-core" % "5.2.8.Final",
      ...
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"
)
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.12")

addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.1.1")
My
application.conf
在My
local db.conf

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
play.db.default = "oracle"
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
    }
  }
}
include "application.conf"
include "local-db.conf"
Playframework默认使用HikariCP,因此以下配置适用于HikariCP

我的本地db.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
play.db.default = "oracle"
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
    }
  }
}
include "application.conf"
include "local-db.conf"
local.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
play.db.default = "oracle"
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
    }
  }
}
include "application.conf"
include "local-db.conf"
plugins.sbt

libraryDependencies ++= Seq(
      javaJdbc,
      javaJpa,
      cache,
      javaWs,
      "org.hibernate" % "hibernate-core" % "5.2.8.Final",
      ...
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"
)
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.12")

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

<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


希望它能解决您的问题。

我最近有一个项目与
“org.hibernate”%”“hibernate entitymanager”%”“5.2.8.Final”

根据@nielstockton的评论,我在DefaultJPAApi类中没有看到任何直接使用hibernate的东西

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 {
下面是我当前的配置。我使用Oracle作为数据库

构建.sbt

libraryDependencies ++= Seq(
      javaJdbc,
      javaJpa,
      cache,
      javaWs,
      "org.hibernate" % "hibernate-core" % "5.2.8.Final",
      ...
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"
)
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.12")

addSbtPlugin("com.typesafe.sbt" % "sbt-twirl" % "1.1.1")
My
application.conf
在My
local db.conf

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
play.db.default = "oracle"
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
    }
  }
}
include "application.conf"
include "local-db.conf"
Playframework默认使用HikariCP,因此以下配置适用于HikariCP

我的本地db.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
play.db.default = "oracle"
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
    }
  }
}
include "application.conf"
include "local-db.conf"
local.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
play.db.default = "oracle"
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
    }
  }
}
include "application.conf"
include "local-db.conf"
plugins.sbt

libraryDependencies ++= Seq(
      javaJdbc,
      javaJpa,
      cache,
      javaWs,
      "org.hibernate" % "hibernate-core" % "5.2.8.Final",
      ...
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"
)
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.12")

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

<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


希望它能解决您的问题。

因此Play正在调用一些Hibernate方法,而您正在使用的Hibernate版本中不再存在这种方法。因此,询问Play为什么他们在据称使用JPA API时调用专有方法(您不需要这样做),Play调用的是一些Hibernate方法,而您正在使用的Hibernate版本中不再存在这种方法。因此,询问Play为什么他们在据称使用JPAAPI时调用专有方法(您不需要这样做)