3 Stimmen

Spiel-Rahmenwerk: JPA-Fehler aufgetreten (EntityManagerFactory kann nicht erstellt werden)

Ich fing an, zu einem Play-Projekt in Java beizutragen, lud den Code herunter, erstellte das Play-Projekt, fügte Bibliotheken hinzu und setzte alles, was ich konnte, und erstellte dann die Datenbank. Schließlich schien alles in Ordnung zu sein, aber wenn ich localhost:9000 ausführen, bekomme ich diesen Fehler:

JPA error
@66kcmab39
Internal Server Error (500) for request GET /favicon.ico

JPA error
A JPA error occurred (Unable to build EntityManagerFactory): Unable to get the default  Bean Validation factory
play.exceptions.JPAException: Unable to build EntityManagerFactory
    at play.db.jpa.JPAPlugin.onApplicationStart(JPAPlugin.java:227)
    at play.Play.start(Play.java:427)
    at play.Play.detectChanges(Play.java:530)
    at play.Invoker$Invocation.init(Invoker.java:100)
    at Invocation.HTTP Request(Play!)
Caused by: org.hibernate.HibernateException: Unable to get the default Bean Validation factory
at org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL(BeanValidationActivator.java:104)
at org.hibernate.cfg.AnnotationConfiguration.applyBeanValidationConstraintsOnDDL(AnnotationConfiguration.java:477)
at org.hibernate.cfg.AnnotationConfiguration.applyConstraintsToDDL(AnnotationConfiguration.java:429)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:403)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1459)
at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:193)
at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:1086)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
at play.db.jpa.JPAPlugin.onApplicationStart(JPAPlugin.java:225)
... 4 more
Caused by: java.lang.reflect.InvocationTargetException
at org.hibernate.cfg.beanvalidation.BeanValidationActivator.applyDDL(BeanValidationActivator.java:95)
... 13 more
Caused by: org.hibernate.HibernateException: Unable to build the default ValidatorFactory
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:322)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.applyDDL(TypeSafeActivator.java:83)
... 14 more
Caused by: javax.validation.ValidationException: Unable to find a default provider
at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:264)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
at org.hibernate.cfg.beanvalidation.TypeSafeActivator.getValidatorFactory(TypeSafeActivator.java:319)
... 15 more

Version spielen: 1.1.1
MySQL5
Betriebssystem Ubuntu

Haben Sie eine Idee, woran das liegen könnte?
Danke
kvgr

2voto

Jean-Philippe Briend Punkte 3334

Gute Antwort: Sie müssen den Hibernate Validator zu Ihrer Anwendung hinzufügen.

2voto

Coding Elements Punkte 940

Stellen Sie sicher, dass die JPA-Annotationen (wie @Id und @OneToMany) entweder:

(1) Alle unmittelbar über den Feldern.

@Id
public Long id;

(2) Oder, Alle unmittelbar über dem Getter für die Felder.

private Long id;

@Id
public Long getId(){
    return id;
}

Die Verwendung einer Kombination führt zu dem Fehler, den Sie sehen.

// ERROR

@Id
private Long id;

private List<Child> children;

public Long getId(){
    return id;
}

@OneToMany
public List<Child> getChildren(){
    return id;
}

Beachten Sie, dass einige Anmerkungen wie z. B.:

@Constraints.Required

@Formats.DateTime(pattern="yyyy-MM-dd")

usw...

muss unmittelbar über dem Feldnamen stehen. Sie können diese nicht über die Getter setzen. Aber das ist in Ordnung.

0voto

Jean-Rémy Revy Punkte 5469

Als Ergänzung, um den Validator hinzuzufügen, fügen Sie Folgendes zu Ihrer dependencies.yml hinzu

Abhängigkeiten von Anwendungen

# Application dependencies

require:
    - play
    - org.hibernate -> hibernate-core 3.6.9.Final:
        force: true
    - org.hibernate -> hibernate-validator 4.2.0.Final

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X