Java JPA实体类和SQL查询从MySQL检索数据

Java JPA实体类和SQL查询从MySQL检索数据,java,mysql,jpa,Java,Mysql,Jpa,我正在开发java桌面应用程序,使用JPA连接到数据库。我在Mysql中的一个表中检索要列出的实体时遇到问题,我已经成功地使用其他表进行了检索。但是这个有外键,我有错误 实体类: package databaseController; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.per

我正在开发java桌面应用程序,使用JPA连接到数据库。我在Mysql中的一个表中检索要列出的实体时遇到问题,我已经成功地使用其他表进行了检索。但是这个有外键,我有错误

实体类:

package databaseController;

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


    @Entity
    public class Specific {

        private String SPECIFIC_NAME;
        private int SAUCE_ID;
        private String SPECIFIC_TOPPINGS;
        private int SPECIFIC_P_PRICE;

        private int SPECIFIC_S_PRICE;
        private int SPECIFIC_M_PRICE;
        private int SPECIFIC_L_PRICE;
        private int SPECIFIC_XL_PRICE;


        @Id
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private int SPECIFIC_ID;

        @ManyToOne
        @JoinColumn(name = "SAUCE_ID")
        private Sauce souce;

        public String getSPECIFIC_NAME() {
            return SPECIFIC_NAME;
        }

        public void setSPECIFIC_NAME(String sPECIFIC_NAME) {
            SPECIFIC_NAME = sPECIFIC_NAME;
        }

        public int getSAUCE_ID() {
            return SAUCE_ID;
        }

        public void setSAUCE_ID(int sAUCE_ID) {
            SAUCE_ID = sAUCE_ID;
        }

        public String getSPECIFIC_TOPPINGS() {
            return SPECIFIC_TOPPINGS;
        }

        public void setSPECIFIC_TOPPINGS(String sPECIFIC_TOPPINGS) {
            SPECIFIC_TOPPINGS = sPECIFIC_TOPPINGS;
        }

        public int getSPECIFIC_P_PRICE() {
            return SPECIFIC_P_PRICE;
        }

        public void setSPECIFIC_P_PRICE(int sPECIFIC_P_PRICE) {
            SPECIFIC_P_PRICE = sPECIFIC_P_PRICE;
        }

        public int getSPECIFIC_S_PRICE() {
            return SPECIFIC_S_PRICE;
        }

        public void setSPECIFIC_S_PRICE(int sPECIFIC_S_PRICE) {
            SPECIFIC_S_PRICE = sPECIFIC_S_PRICE;
        }

        public int getSPECIFIC_M_PRICE() {
            return SPECIFIC_M_PRICE;
        }

        public void setSPECIFIC_M_PRICE(int sPECIFIC_M_PRICE) {
            SPECIFIC_M_PRICE = sPECIFIC_M_PRICE;
        }

        public int getSPECIFIC_L_PRICE() {
            return SPECIFIC_L_PRICE;
        }

        public void setSPECIFIC_L_PRICE(int sPECIFIC_L_PRICE) {
            SPECIFIC_L_PRICE = sPECIFIC_L_PRICE;
        }

        public int getSPECIFIC_XL_PRICE() {
            return SPECIFIC_XL_PRICE;
        }

        public void setSPECIFIC_XL_PRICE(int sPECIFIC_XL_PRICE) {
            SPECIFIC_XL_PRICE = sPECIFIC_XL_PRICE;
        }

        public int getSPECIFIC_ID() {
            return SPECIFIC_ID;
        }

        public void setSPECIFIC_ID(int sPECIFIC_ID) {
            SPECIFIC_ID = sPECIFIC_ID;
        }

        public Sauce getSouce() {
            return souce;
        }

        public void setSouce(Sauce souce) {
            this.souce = souce;
        }


    }
外键实体(其他表实体):

在我的控制器中,我尝试使用以下方法从特定表检索数据:

private List<Specific> special = em.createQuery("SELECT e FROM Specific e").getResultList();
private List special=em.createQuery(“从特定的e中选择e”).getResultList();
请看一看,我确信这与外键连接有关

我得到的错误是:

Exception in thread "AWT-EventQueue-0" Local Exception Stack: 
Exception [EclipseLink-30005] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: sun.misc.Launcher$AppClassLoader@71bd8993
Internal Exception: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [as] failed.
Internal Exception: Exception [EclipseLink-7250] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException
Exception Description: [class databaseController.Specific] uses a non-entity [class databaseController.Sauce] as target entity in the relationship attribute [field souce].
    at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:127)
    at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:107)
    at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:177)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at databaseController.DatabaseController.<init>(DatabaseController.java:21)
    .....
线程“AWT-EventQueue-0”本地异常堆栈中的异常: 异常[EclipseLink-30005](Eclipse持久性服务-2.5.2.v20140319-9ad6abd):org.Eclipse.Persistence.exceptions.PersistenceUnitLoadingException 异常描述:使用ClassLoader:sun.misc.Launcher搜索持久性存档时引发异常$AppClassLoader@71bd8993 内部异常:javax.persistence.PersistenceException:Exception[EclipseLink-28018](Eclipse持久性服务-2.5.2.v20140319-9ad6abd):org.Eclipse.persistence.exceptions.EntityManagerSetupException 异常描述:PersistenceUnit[as]的预部署失败。 内部异常:异常[EclipseLink-7250](Eclipse持久性服务-2.5.2.v20140319-9ad6abd):org.Eclipse.Persistence.exceptions.ValidationException 异常描述:[class databaseController.Specific]使用非实体[class databaseController.Sauce]作为关系属性[field souce]中的目标实体。 在org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:127)上 位于org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:107) 位于org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:177) 位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:79) 位于javax.persistence.persistence.createEntityManagerFactory(persistence.java:54) databaseController.databaseController.(databaseController.java:21) .....
我猜问题与
SAUCE\u ID
字段有关,该字段在实体中声明了两次:

@Entity
public class Specific {
    private int SAUCE_ID;
    ...
    @JoinColumn(name = "SAUCE_ID")
    @ManyToOne
    private Sauce souce;
}
尝试重命名外键,即

@Entity
public class Specific {
    ...
    @JoinColumn(name = "SAUCE_FK")
    @ManyToOne
    private Sauce souce;
}

编辑:还要确保持久化中包含了
实体。xml

发布错误,以及您得到的异常。
@Entity
public class Specific {
    ...
    @JoinColumn(name = "SAUCE_FK")
    @ManyToOne
    private Sauce souce;
}