Java JPA实体类和SQL查询从MySQL检索数据
我正在开发java桌面应用程序,使用JPA连接到数据库。我在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
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;
}