GVKun编程网logo

java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey

5

在本文中,我们将带你了解java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey在这篇文章中,同时我们还将给您一些技巧,以

在本文中,我们将带你了解java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey在这篇文章中,同时我们还将给您一些技巧,以帮助您实现更有效的android – NoSuchMethodError:java.lang.Long.hashCode、Android上的Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty、Hibernate 3.5.x:NoSuchMethodError:javax.persistence.OneToMany.orphanRemoval、java.lang.NoClassDefFoundError:javax / persistence / SharedCacheMode

本文目录一览:

java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey

java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey

请帮我解决这个错误。按照下面的代码:

我的班级/实体人:

package entities;import java.util.Calendar;import java.util.List;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.OneToMany;import javax.persistence.Temporal;import javax.persistence.TemporalType;@Entitypublic class Person {@Id@GeneratedValueprivate long id;@Columnprivate String name;@Temporal(TemporalType.DATE)private Calendar dateBirth;@Columnprivate String email;// MappedBy: Name of the instance that will indicate to whom One belongs, that is, an experience.//           It should say which person is associated// TargetEntity: Informs the entity we are associating// FetchType.Lazy: Was chosen for performance// Cascade: ALL to allow changes in all relationships. @OneToMany(mappedBy = "person", targetEntity = Experience.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL) private List<Experience> experiences;// Getters and setterspublic long getId() {    return id;}public void setId(long id) {    this.id = id;}public String getName() {    return name;}public void setName(String name) {    this.name = name;}public Calendar getDateBirth() {    return dateBirth;}public void setDateBirth(Calendar dateBirth) {    this.dateBirth = dateBirth;}public String getEmail() {    return email;}public void setEmail(String email) {    this.email = email;}public List<Experience> getExperiences() {    return experiences;}public void setExperiences(List<Experience> experiences) {    this.experiences = experiences;}}

这是我的课程/实体体验:

package entities;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;@Entitypublic class Experience {@Id@GeneratedValueprivate long id;@ManyToOne@JoinColumn(name="idPerson", referencedColumnName="id")private Person person;@Columnprivate String company;@Columnprivate String activities;// Getters and setterspublic long getId() {    return id;}public void setId(long id) {    this.id = id;}public Person getPerson() {    return person;}public void setPerson(Person person) {    this.person = person;}public String getCompany() {    return company;}public void setCompany(String company) {    this.company = company;}public String getActivities() {    return activities;}public void setActivities(String activities) {    this.activities = activities;}}

我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?><persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence"><persistence-unit name="professionalmanagementDB">    <!-- JPA implementation -->    <provider>org.hibernate.ejb.HibernatePersistence</provider>    <!-- Entities -->     <class>entities.Person</class>    <class>entities.Experience</class>    <properties>         <property name="hibernate.dialect"               value="org.hibernate.dialect.MySQLDialect" />         <property name="hibernate.hbm2ddl.auto"          value="update" />         <property name="hibernate.show_sql"              value="true" />         <property name="hibernate.format_sql"            value="true" />          <property name="javax.persistence.jdbc.driver"   value="com.mysql.jdbc.Driver" />         <property name="javax.persistence.jdbc.url"      value="jdbc:mysql://localhost/professionalmanagementDB" />         <property name="javax.persistence.jdbc.user"     value="root" />         <property name="javax.persistence.jdbc.password" value="" />     </properties></persistence-unit></persistence>

因此,我正在尝试使用以下代码进行查询:

EntityManagerFactory factory = Persistence.createEntityManagerFactory("professionalmanagementDB");EntityManager manager = factory.createEntityManager();String jpql = "select p ";jpql += "from Person";Query query = manager.createQuery(jpql);List<Person> list = query.getResultList();

但总是会发生以下错误:

java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;org.hibernate.cfg.AnnotationBinder.bindManyToOne(AnnotationBinder.java:2881)org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1795)org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:963)org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:796)org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3790)org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3744)org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843)org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397)org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842)org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:73)org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)dao.PersonDAO.readAll(PersonDAO.java:65)manager.PersonManager.getPersons(PersonManager.java:17)org.apache.jsp.HomeScreen_jsp._jspService(HomeScreen_jsp.java:87)org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)javax.servlet.http.HttpServlet.service(HttpServlet.java:727)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)javax.servlet.http.HttpServlet.service(HttpServlet.java:727)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我的Maven依赖项如下:

javaee-api:7.0hibernate-jpa-2.0-api:1.0.1.Finalhibernate-entitymanager:4.3.4.Finalmysql-connector-java:5.1.29

答案1

小编典典

我不知道为什么Hibernate想要foreignKey@JoinColumn批注中使用该属性,但是它是在JPA
2.1中添加的。使用JPA
2.1 API依赖性而不是2.0。

android – NoSuchMethodError:java.lang.Long.hashCode

android – NoSuchMethodError:java.lang.Long.hashCode

我在AbstractORM类的hashCode上有以下覆盖方法:
var _id = Random().nextLong()

override fun getId() = _id // AbstractORM class implements an interface that defines this method getId()

override fun hashCode() = getId().hashCode()

突然开始抛出以下异常:

FATAL EXCEPTION: main
java.lang.NoSuchMethodError: java.lang.Long.hashCode
   at com.company.ormlite.AbstractORM.hashCode(AbstractORM.kt:271)
   at java.util.HashMap.put(HashMap.java:390)
   at java.util.HashSet.add(HashSet.java:95)
   at kotlin.collections.ArraysKt___ArraysKt.toCollection(_Arrays.kt:6518)
   at kotlin.collections.ArraysKt___ArraysKt.toSet(_Arrays.kt:6853)
   at kotlin.collections.SetsKt__SetsKt.setof(Sets.kt:32)
   at com.company.android.tna.orm.DataManager.getTables(DataManager.kt:16)
   at com.company.android.tna.orm.DataManager.getTables(DataManager.kt:10)
   at com.company.android.core.utils.AbstractDataManager.create(AbstractDataManager.kt:25)
   at com.company.android.core.utils.AbstractDataManager.start(AbstractDataManager.kt:44)
   at com.company.android.core.utils.AbstractZKApplication.onCreate(AbstractZKApplication.kt:54)
   at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999)
   at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4151)
   at android.app.ActivityThread.access$1300(ActivityThread.java:130)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255)
   at android.os.Handler.dispatchMessage(Handler.java:99)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:4745)
   at java.lang.reflect.Method.invokeNative(Native Method)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
   at dalvik.system.NativeStart.main(Native Method)

这让我傻眼了几个原因:

> Java和Kotlin中的所有类都有hashCode方法,因为它继承自Object或Any.
>如何找不到Android SDK本身的方法?如果SDK不存在,它是如何运行的?
>在IntelliJ IDEA中检查该行代码时,它会将我发送到kotlin.Any.hashCode,而不是java.lang.Long.hashcode.

任何见解都将非常感谢,提前感谢.

解决方法

检查编译后的AbstractORM类后,我发现了问题:较新的Kotlin版本为该行生成了不同的代码
getId().hashCode()

Kotlin 1.1.2生成以下代码:

Long.valueOf(this.getId()).hashCode()

而较新版本的Kotlin会生成其他代码:

Long.hashCode(this.getId())

问题是Android中的这个静态方法Long.hashCode(long)仅在API 24(Android 7.0)之后可用,而我正在测试具有版本4.1(API 16)的Android设备.

我正在通过手动计算哈希码来暂时修复,尽管我已经打开了一个问题here.

override fun hashCode() = (getId() xor getId().ushr(32)).toInt()

如issue所述,切换到Kotlin编译器的Java 1.6目标会生成旧的兼容代码.

PS:我不是100%肯定那些Kotlin版本,请带上一粒盐.

Android上的Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty

Android上的Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty

我在 Android 2.2.1上得到以下异常:

java.lang.NoSuchMethodError:java.lang.String.isEmpty

我从Scala调用text.isEmpty.任何想法,如何解决这个问题?

解决方法

使用JRE / JDK 1.5,它在String上没有isEmpty方法.这将避免Scala使用1.6的isEmpty而不是自己的情况.如果您也有Java库,请务必选择与1.5兼容的库.

Hibernate 3.5.x:NoSuchMethodError:javax.persistence.OneToMany.orphanRemoval

Hibernate 3.5.x:NoSuchMethodError:javax.persistence.OneToMany.orphanRemoval

我正在尝试升级到Hibernate 3.5.3-FINAL。

运行单元测试时,我现在收到以下异常:

java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z   at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1837)

我的类路径包含以下JAR:

从hibernatedist:

antlr-2.7.6.jarcommons-collections-3.1.jardom4j-1.6.1.jarjavassist-3.9.0.GA.jarjta-1.1.jarslf4j-api-1.5.8.jarcglib-2.2.jarhibernate-jpa-2.0-api-1.0.0.Final.jarhibernate3.jar

其他jar:

blazeds-common-3.2.0.3978.jarblazeds-core-3.2.0.3978.jarblazeds-opt-3.2.0.3978.jarblazeds-proxy-3.2.0.3978.jarblazeds-remoting-3.2.0.3978.jarcommons-lang-2.3.jardbunit-2.4.7.jarejb3-persistence.jar // Note, I''ve tried excluding this, but I get different errorsguava-r05.jarhsqldb-1.8.0.7.jarjunit-4.1.jarlambdaj-2.0-with-dependencies.jarlog4j-1.2.14.jarmockito-all-1.8.0.jarpersistence-api-1.0.jarspring-security-core-2.0.0.jarspring.jarsqljdbc.jar

我已经对此进行了研究,发现答案表明我的Web服务器必须符合JPA2:

不幸的是,如果您的应用服务器不符合JPA 2标准,那么您可能会不走运

该项目是一个库,而不是网络服务器项目。(尽管最终将其部署到Web服务器,但我只是在这里运行单元测试)

我想念什么?

<indulgent_rant>

附带说明,每次升级Hibernate时,我都会发现自己花了很多时间研究MethodNotFoundExceptionClassNotFoundException的冲突jar,这令人非常沮丧。一定有更简单的方法吗?

我确信,在宣布这一消息后,他们将这些模块合并到一个核心项目中,这些冲突会消失吗?

</indulgent_rant>

答案1

小编典典

正如Timo指出的,删除persistence-api-1.0.jar

以防万一,这是我正在使用的依赖项:

org.hibernate:hibernate-entitymanager:jar:3.5.3-Final:compile+-org.hibernate:hibernate-core:jar:3.5.3-Final:compile| +-antlr:antlr:jar:2.7.6:compile| +-commons-collections:commons-collections:jar:3.2:compile| +-dom4j:dom4j:jar:1.6.1:编译| | \-xml-apis:xml-apis:jar:1.0.b2:compile| \-javax.transaction:jta:jar:1.1:compile+-org.hibernate:hibernate注释:jar:3.5.3-Final:compile| \-org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile+-cglib:cglib:jar:2.2:compile| \-asm:asm:jar:3.1:compile+-javassist:javassist:jar:3.9.0.GA:compile\-org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile

我从我的单个声明中获取它们pom.xml

<dependency>  <groupId>org.hibernate</groupId>  <artifactId>hibernate-entitymanager</artifactId>  <version>3.5.3-Final</version></dependency>

这应该可以以某种方式回答您的放纵语(如果我改写:使用Maven-或知道您在做什么)。

java.lang.NoClassDefFoundError:javax / persistence / SharedCacheMode

java.lang.NoClassDefFoundError:javax / persistence / SharedCacheMode

我正在尝试利用Spring mvc和Spring数据实现一个应用程序。当我尝试持久化对象时,一切工作正常,但是当我想在服务器上部署应用程序时,出现如下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ''entityManagerFactory'': Failed to introspect bean class [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean] for lookup method metadata: could not find class that it depends on; nested exception is java.lang.NoClassDefFoundError: javax/persistence/SharedCacheMode

pom.xml是

 <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.data</groupId>                <artifactId>spring-data-releasetrain</artifactId>                <version>Hopper-SR4</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>    <dependencies>        <dependency>            <groupId>org.springframework.data</groupId>            <artifactId>spring-data-jpa</artifactId>            <version>1.10.5.RELEASE</version>        </dependency>        <dependency>            <groupId>org.hibernate</groupId>            <artifactId>hibernate-entitymanager</artifactId>            <version>5.2.2.Final</version>        </dependency>        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-api</artifactId>            <version>1.7.12</version>        </dependency>        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-log4j12</artifactId>            <version>1.7.12</version>        </dependency>        <dependency>            <groupId>log4j</groupId>            <artifactId>log4j</artifactId>            <version>1.2.17</version>        </dependency>        <dependency>            <groupId>mysql</groupId>            <artifactId> mysql-connector-java</artifactId>            <version>6.0.5</version>        </dependency>    </dependencies>

和applicationContext是

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa"       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd         http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd          http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">    <context:component-scan base-package="com.amir"/>    <bean id="dataSource">        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>        <property name="url" value="jdbc:mysql://localhost:3306/amirdb"/>        <property name="username" value="root"/>        <property name="password" value="root"/>    </bean>    <jpa:repositories base-package="com.tsi"/>    <tx:annotation-driven/>    <!--<jdbc:embedded-database id="dataSource" />-->    <bean id="entityManagerFactory">        <property name="packagesToScan" value="com.tsi"/>        <property name="jpaProperties">            <props>                <prop key="hibernate.hbm2ddl.auto">create</prop>                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>            </props>        </property>        <property name="dataSource" ref="dataSource"/>        <property name="jpaVendorAdapter">            <bean>                <property name="generateDdl" value="true"/>                <property name="showSql" value="true"/>            </bean>        </property>    </bean>    <bean id="transactionManager">        <property name="entityManagerFactory" ref="entityManagerFactory"/>    </bean></beans>

对于mvc,使用了另外两个Spring Congfig文件,它们是rootContext

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <import resource="classpath:applicationContext.xml"/></beans>

并且调度程序servlet是

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"       xmlns:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">    <bean id="conversionService"/>    <mvc:annotation-driven conversion-service="conversionService">        <mvc:argument-resolvers>            <bean/>            <bean>                <property name="maxPageSize" value="3"/>            </bean>        </mvc:argument-resolvers>    </mvc:annotation-driven>    <bean>        <constructor-arg name="conversionService" ref="conversionService"/>    </bean>    <context:component-scan base-package="com.its" />    <bean id="viewResolver">        <property name="prefix" value="/WEB-INF/views/" />        <property name="suffix" value=".jsp" />    </bean></beans>

在实体类中,我曾经importjavax.persistence.*;启用@Entity注释。我认为,也许我正在混合使用不同的版本并试图阅读相关文档,但是我什么也没找到。任何建议将不胜感激。

答案1

小编典典

 <dependency>     <groupId>javax.persistence</groupId>     <artifactId>persistence-api</artifactId>     <version>1.0.2</version>  </dependency>

给你 pom.xml

编辑:

   <dependency>      <groupId>org.hibernate.javax.persistence</groupId>      <artifactId>hibernate-jpa-2.1-api</artifactId>      <version>1.0.0.Final</version>    </dependency>

关于java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – NoSuchMethodError:java.lang.Long.hashCode、Android上的Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty、Hibernate 3.5.x:NoSuchMethodError:javax.persistence.OneToMany.orphanRemoval、java.lang.NoClassDefFoundError:javax / persistence / SharedCacheMode等相关知识的信息别忘了在本站进行查找喔。

本文标签: