java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey [英] java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey

查看:208
本文介绍了java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



这是我的班级/实体Person:

 包实体; 

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;

@Entity
公共类人员{

@Id
@GeneratedValue
私人长ID;

@Column
私人字符串名称;

@Temporal(TemporalType.DATE)
私人日历dateBirth;

@Column
私人字符串电子邮件;

// MappedBy:实例的名称,表示一个人属于谁,即一种体验。
//应该说哪个人是关联的
// TargetEntity:通知我们正在关联的实体
// FetchType.Lazy:被选为表现
// Cascade:ALL以改变所有关系。
@OneToMany(mappedBy =person,targetEntity = Experience.class,fetch = FetchType.LAZY,cascade = CascadeType.ALL)
private List< Experience>经验;

// Getters和Setters
public 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;
}

公开列表<体验> getExperiences(){
返回体验;
}

public void setExperiences(List< Experience> experience){
this.experiences = experience;
}

}

这是我的班级/实体体验:

 包实体; 

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@实体
公共类体验{

@Id
@GeneratedValue
私人长ID;

@ManyToOne
@JoinColumn(name =idPerson,referencedColumnName =id)
private Person person;

@Column
私人字符串公司;

@Column
私人字符串活动;

// Getters和setters

public 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.0encoding =UTF-8?> 

< persistence version =1.0xmlns =http://java.sun.com/xml/ns/persistence>

< persistence-unit name =professionalmanagementDB>

<! - - JPA实现 - >
< provider> org.hibernate.ejb.HibernatePersistence< / provider>

<! - 实体 - >
< class> entities.Person< / class>
< class> entities.Experience< / class>

<属性>
< property name =hibernate.dialectvalue =org.hibernate.dialect.MySQLDialect/>
< property name =hibernate.hbm2ddl.autovalue =update/>
< property name =hibernate.show_sqlvalue =true/>
< property name =hibernate.format_sqlvalue =true/>
< property name =javax.persistence.jdbc.drivervalue =com.mysql.jdbc.Driver/>
< property name =javax.persistence.jdbc.urlvalue =jdbc:mysql:// localhost / professionalmanagementDB/>
< property name =javax.persistence.jdbc.uservalue =root/>
< property name =javax.persistence.jdbc.passwordvalue =/>
< / properties>

< / persistence-unit>

< /持久性>

所以,我试图用这段代码来进行查询:

  EntityManagerFactory factory = Persistence.createEntityManagerFactory(professionalmanagementDB); 
EntityManager manager = factory.createEntityManager();

String jpql =select p;
jpql + =from Person;

查询查询= manager.createQuery(jpql);

列表< 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)
组织。 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.cl assloading.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。服务(HttpServlet.java:727)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apac he.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet。服务(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

我的maven依赖关系如下:

pre code $ javaee-api 7.0
hibernate-jpa-2.0-api:1.0.1.Final
hibernate-entitymanager:4.3.4.Final
mysql-connector-java:5.1.29


解决方案

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


Please help me with this error. Follow my code below:

This my class/entity Person:

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;

@Entity
public class Person {

@Id
@GeneratedValue
private long id;

@Column
private String name;

@Temporal(TemporalType.DATE)
private Calendar dateBirth;

@Column
private 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 setters
public 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;
}

}

This is my class/entity Experience:

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;

@Entity
public class Experience {

@Id
@GeneratedValue
private long id;

@ManyToOne
@JoinColumn(name="idPerson", referencedColumnName="id")
private Person person;

@Column
private String company;

@Column
private String activities;

// Getters and setters

public 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;
}

}

My 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>

So, I'm trying to use this code to make a query:

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();

But always happen this error:

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)

My maven dependencies is as follows:

javaee-api:7.0
hibernate-jpa-2.0-api:1.0.1.Final
hibernate-entitymanager:4.3.4.Final
mysql-connector-java:5.1.29

解决方案

I don't know why Hibernate is wanting that foreignKey attribute on the @JoinColumn annotation, but it was added in JPA 2.1. Use the JPA 2.1 API dependency instead of the 2.0.

这篇关于java.lang.NoSuchMethodError:javax.persistence.JoinColumn.foreignKey的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆