У меня есть сущности, и они были однонаправленными, поэтому я решил сделать их двунаправленными, когда они были однонаправленными, все было хорошо, но когда я изменил их на двунаправленный, у меня возникли проблемы !!!!JPA Bidirectionnal Uknown column
У меня есть много сущностей, но я просто позвоню, у меня проблема в двух объектах, одна с 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
, которого нет в базе данных, то же самое с полем service
в Project
.
Проблема заключается в том, почему эта странная ошибка ?, она не должна ссылаться на Agent.ID
вместо AGENT_ID
, когда он создает запрос к базе данных, я пытался изменить имя идентификатора в Agent
объекта к AGENT_ID
используя @Column
но У меня такая же проблема, только с AGENT_AGENT_ID
!!!!
Любой знает, как решить эту проблему, я на GlassFish, спасибо всем :)
По трассировки стека, 'project' таблицы должны' AGENT_ID' столбец. – CycDemo
Если таблица базы данных «Проект» не содержит столбец с идентификатором агента, то как вы связываете проект с Агентом? Забудьте о Java, вам нужно сначала получить свою базу данных. Таблица свойств должна иметь внешний ключ для Агента и, скорее всего, ее следует называть AGENT_ID. – DuncanKinnear
Кроме того, почему вы используете аннотацию '@ Basic'? Лучше использовать аннотацию '@ Column', которая более стандартная. – DuncanKinnear