【发布时间】:2015-06-09 01:31:16
【问题描述】:
我有实体并且它们是单向的,所以我决定将它们设为双向,当它们是单向时一切都很好,但是当我将它们更改为双向时我遇到了一些问题!!!!
我有很多实体,但我只是参考一下,我在两个实体中遇到问题,一个是 OneToMany,另一个是 ManyToOne。
第一个实体称为Agent(OneToMany 和Project):
@Entity
public class Agent implements Serializable {
private static final long serialVersionUID = 1047335572433032863L;
@GeneratedValue
@Id
private int id;
@Basic
private String fistname;
@Basic
private String lastname;
@ManyToOne
private Department department;
@OneToMany(mappedBy = "agent")
private List<Project> project;
//Setters and getters ...
}
第二个实体称为Project(ManyToOne 和Agent):
@Entity
public class Project implements Serializable {
private static final long serialVersionUID = -6643569041998000573L;
@GeneratedValue
@Id
private int id;
@Basic
private String crmCode;
@Basic
private String circuit;
@Basic
private String type;
@Basic
private String scope;
@Basic
@Temporal(TemporalType.DATE)
private Date beginDate;
@Basic
@Temporal(TemporalType.DATE)
private Date endDate;
@ManyToOne
private Agent agent;
@ManyToOne
private Service service;
//Setters and getters
}
但是当我启动一些获取查询时,我得到了这个异常:
exception
javax.servlet.ServletException: javax.ejb.EJBException
root cause
javax.ejb.EJBException
root cause
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'AGENT_ID' in 'field list'
Error Code: 1054
Call: SELECT ID, BEGINDATE, CIRCUIT, CRMCODE, ENDDATE, SCOPE, TYPE, AGENT_ID, SERVICE_ID FROM PROJECT WHERE (CRMCODE = ?)
bind => [1 parameter bound]
Query: ReadAllQuery(referenceClass=Project sql="SELECT ID, BEGINDATE, CIRCUIT, CRMCODE, ENDDATE, SCOPE, TYPE, AGENT_ID, SERVICE_ID FROM PROJECT WHERE (CRMCODE = ?)")
root cause
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'AGENT_ID' in 'field list'
Error Code: 1054
Call: SELECT ID, BEGINDATE, CIRCUIT, CRMCODE, ENDDATE, SCOPE, TYPE, AGENT_ID, SERVICE_ID FROM PROJECT WHERE (CRMCODE = ?)
bind => [1 parameter bound]
Query: ReadAllQuery(referenceClass=Project sql="SELECT ID, BEGINDATE, CIRCUIT, CRMCODE, ENDDATE, SCOPE, TYPE, AGENT_ID, SERVICE_ID FROM PROJECT WHERE (CRMCODE = ?)")
root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'AGENT_ID' in 'field list'
这里我可以理解问题,JPA引用了数据库中不存在的AGENT_ID列,与Project中的字段service相同。
问题是为什么这个奇怪的错误?,当它创建对数据库的请求时,它不应该引用Agent.ID而不是AGENT_ID,我试图更改Agent实体中的id名称到AGENT_ID 使用@Column 但我遇到了同样的问题只是AGENT_AGENT_ID !!!!
任何人都知道如何解决这个问题,我在 glassfish,谢谢大家:)
【问题讨论】:
-
根据堆栈跟踪,
Project表必须AGENT_ID列。 -
如果
Project数据库表不包含代理ID的列,那么如何将项目与代理关联?忘掉Java吧,你需要先把你的数据库弄好。属性表应该有一个代理的外键,并且很可能应该称为 AGENT_ID。 -
另外,你为什么使用
@Basic注释?最好使用@Column注解,比较标准。 -
@DuncanKinnear 我已经提到过,我用
Agent注释了Agent实体的id,但我遇到了同样的问题,只是JPA 报告AGENT_AGENT_ID 不存在,对于@Basic,它自动生成,我使用 IntelliJ IDEA :) -
@CycDemo 是的,我明白这一点,但正如你所见,我没有更改
Agent的id,我不明白这个奇怪的错误!!!跨度>
标签: java jakarta-ee jpa glassfish eclipselink