1

Ошибка folowing в настоящее время показано, когда попытка сохранения данных:Trouble настройки Play 2 для работы с JPA (стойкость)

[PersistenceException: [PersistenceUnit: update] class or package not found] 
In C:\Users\Johann\Desktop\SODET\play-2.1.1\todolist\app\models\Stream.java at line 32. 



32    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("update"); 

Это Stream.java (модель)

package models; 

import javax.persistence.Entity; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Id; 
import javax.persistence.Persistence; 

import com.restfb.Facebook; 

@Entity 
public class Stream { 
     @Facebook 
     @Id 
     public String post_id; 

     @Facebook 
     public String created_time; 

     @Facebook 
     public String message; 

     @Facebook 
     public String permalink; 

     @Override 
     public String toString() { 
     return String.format("%s, %s, %s, %s", created_time, message, permalink, post_id); 
     } 

     public void save(){ 
      EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("update"); 
      EntityManager entityManager = entityManagerFactory.createEntityManager(); 
      entityManager.getTransaction().begin(); 
      entityManager.persist(this);  
      entityManager.getTransaction().commit(); 
      entityManager.close(); 
     } 

} 

persistence.xml файл находится в директории конф/META-INF:

<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="update" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

     <non-jta-data-source>DefaultDS</non-jta-data-source> 

     <class>models.Stream</class> 
     <class>models.FacebookUser</class> 
     <class>models.Comment</class> 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/> 
     </properties> 
    </persistence-unit> 

</persistence> 

И это Build.scala

import sbt._ 
import Keys._ 
import play.Project._ 

object ApplicationBuild extends Build { 

    val appName   = "todolist" 
    val appVersion  = "1.0-SNAPSHOT" 

    val appDependencies = Seq(
    // Add your project dependencies here, 
    "com.restfb" % "restfb" % "1.6.11", 
    "mysql" % "mysql-connector-java" % "5.1.25", 
    "org.hibernate" % "hibernate-entitymanager" % "4.2.1.Final", 
    javaCore, 
    javaJdbc, 
    javaJpa 
) 

    val main = play.Project(appName, appVersion, appDependencies).settings(
    // Add your own project settings here  
) 

} 

Я смотрел документацию и не нашел ничего о том, что ...

Спасибо заранее!

+0

** Примечание **: я не знаю много о спящем + настойчивости. Вы должны иметь возможность получить 'EntityManager' следующим образом:' EntityManager manager = JPA.em(); 'в Play. Затем вы можете вызвать 'manager.persist (this);' и т. Д. Это работает для меня, но у меня есть дополнительное свойство в моем 'persistence.xml':' '. Кроме того, вероятно, не связанный с вашей проблемой, но поскольку вы используете MySQL, вам следует перейти на диалект на «org.hibernate.dialect.MySQLDialect' вместо использования« H2Dialect ». – Aerus

ответ

0

рассматривает в вашем application.conf имя не то же самое, как обновление: пример:

jpa.update = updatePersistenceUnit

Я думаю, что у вас нет этой строки приложения должны соответствовать в приложении .conf и hibernate file

примечание: обновление значения в hbm2dll предназначено только для обновления схемы БД, если оно изменяется в модели. я думаю, вы должны использовать имя defaultPersistentUnit, потому что в application.conf это может быть, как это:

jpa.default = defaultPersistenUnit

затем

db.default.driver = драйвер db.defalut. URL = ваш URL

0

ваш persistence.xml файл состояния в следующей конфигурации:

<non-jta-data-source>DefaultDS</non-jta-data-source> 

<persistence-unit name="update" transaction-type="RESOURCE_LOCAL"> 

Ваш application.conf должен иметь следующие записи

# You can expose this datasource via JNDI if needed (Useful for JPA) 
db.default.jndiName=DefaultDS 

# JPA configuration 
# ~~~~~ 
# You can declare as many Ebean servers as you want. 
# By convention, the default server is named `default` 
jpa.default=update 

Проверьте отображение или найти четкое объяснение here.

Смежные вопросы