2015-06-09 7 views
0

У меня есть сущности, и они были однонаправленными, поэтому я решил сделать их двунаправленными, когда они были однонаправленными, все было хорошо, но когда я изменил их на двунаправленный, у меня возникли проблемы !!!!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, спасибо всем :)

+0

По трассировки стека, 'project' таблицы должны' AGENT_ID' столбец. – CycDemo

+0

Если таблица базы данных «Проект» не содержит столбец с идентификатором агента, то как вы связываете проект с Агентом? Забудьте о Java, вам нужно сначала получить свою базу данных. Таблица свойств должна иметь внешний ключ для Агента и, скорее всего, ее следует называть AGENT_ID. – DuncanKinnear

+0

Кроме того, почему вы используете аннотацию '@ Basic'? Лучше использовать аннотацию '@ Column', которая более стандартная. – DuncanKinnear

ответ

2

я уже аннотированный идентификатор объекта агента с @Column (имя = «AGENT_ID»), но я есть та же проблема, только JPA сообщают, что AGENT_AGENT_ID не существует

что вы сделали измените столбец ID в Agent таблицы, но это не будет влиять на колонку присоединиться к Project таблице.

Вы должны сделать что-то вроде:

class Project { 
    //.... 

    @ManyToOne 
    @JoinColumn(name="YOUR_AGENT_ID_COL_NAME"); 
    private Agent agent; 
    //...... 
}