有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPA双向Uknown列

我有实体,它们是单向的,所以我决定把它们做成双向的,当它们是单向的时候,一切都很好,但是当我把它们变成双向的时候,我遇到了一些问题

我有很多实体,但我只想指出,我在两个实体中有一个问题,一个是OneToMany,另一个是ManyToOne

第一个实体被称为AgentOneToManyProject):

@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 ...
}

第二个实体被称为ProjectManyToOneAgent):

@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
}

但当我启动一些fetch查询时,我得到了一个例外:

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吗?当它创建对数据库的请求时,我试图使用@ColumnAgent实体中的id名称更改为AGENT_ID,但我在AGENT_AGENT_ID上遇到了同样的问题

任何人都知道如何解决这个问题,我在吃玻璃鱼,谢谢大家:)


共 (1) 个答案

  1. # 1 楼答案

    i've annotated the id of the Agent entity with @Column(name = "AGENT_ID") but i got the same problem just JPA report that AGENT_AGENT_ID doesn't exist

    您所做的将更改Agent表中的ID列,但不会影响Project表中的join列

    你应该这样做:

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