在本文中,我们将带你了解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
- 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
请帮我解决这个错误。按照下面的代码:
我的班级/实体人:
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
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.
任何见解都将非常感谢,提前感谢.
解决方法
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
java.lang.NoSuchMethodError:java.lang.String.isEmpty
我从Scala调用text.isEmpty.任何想法,如何解决这个问题?
解决方法
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时,我都会发现自己花了很多时间研究MethodNotFoundException
或ClassNotFoundException
的冲突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
我正在尝试利用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等相关知识的信息别忘了在本站进行查找喔。
本文标签: