LoginSignup
3
3

More than 5 years have passed since last update.

Play2.xでHibernateの4.3.x系突っ込んだらjava.lang.NoSuchMethodErrorになる

Posted at

題記の通り、公式ドキュメントに書かれてるHibernateの3.6.9ではなく、4.3.x系を突っ込むとこんな感じのエラーが出ます。

Exception in thread "main" java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:973)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3845)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3799)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1412)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
    at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)

詳しいことは上記エラーメッセージでぐぐってほしいんですが、play2さんのjavaJpaライブラリ指定の中に依存関係で入ってるhibernate-jpa-apiがJPA2.0系で、Hibernate最新版のJPA2.1系とあってないのが原因で怒られちゃう感じらしいです。(ちなみに一年前くらいからこんな感じ)

いつになったら治るのかはわかんないですけど、とりあえず

build.sbt
  // javaJpa,
  javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"),
  "org.hibernate" % "hibernate-entitymanager" % "4.3.8.Final",
  "mysql" % "mysql-connector-java" % "5.1.34",

っていう感じにexclude指定してあげると、 hibernate-jpa-2.0-api-1.0.1.Final.jar になってたのがきちんと hibernate-jpa-2.1-api-1.0.0.Final.jar に差し替わって、無事動きます。

まあ、素直に公式ドキュメントで指定されてる3.6.9.Final使えってことなのかもしれないですが…

ご参考までに。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3