Playframework: произошла ошибка JPA (невозможно создать EntityManagerFactory)

Я начал участвовать в одном проекте Play в Java, загрузил код, создал Play Project, добавил библиотеки и установил все, что мог, а затем создал базу данных. В конце концов все казалось нормально, но когда я запускаю localhost: 9000, я получаю эту ошибку:

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

Воспроизведение версии: 1.1.1 MySQL5 OS Ubuntu

Любая идея, что может быть неправильным? Благодаря kvgr

3 ответа

Хороший ответ: вам нужно добавить Hibernate Validator к вашему приложению.


Убедитесь, что аннотации JPA (например, @Id и @OneToMany):

(1) Все непосредственно над полями.

@Id
public Long id;

(2) Или, Все непосредственно над геттером для полей.

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

Использование комбинации приведет к ошибке, которую вы видите.

// ERROR
@Id
private Long id;
private List<child> children;
public Long getId(){
 return id;
}
@OneToMany
public List<child> getChildren(){
 return id;
}
</child></child>

Обратите внимание, что некоторые аннотации, такие как:

@Constraints.Required

@Formats.DateTime(рисунок = "гггг-ММ-дд" )

и т.д...

должно быть непосредственно над именем поля. Вы не можете поставить их выше геттеров. Но все в порядке.


В качестве дополнения, для добавления валидатора, добавьте это в свои зависимости .yml

Зависимости приложений

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

licensed under cc by-sa 3.0 with attribution.