簡體   English   中英

java.sql.SQLException:找不到列“ JOB_ID”

[英]java.sql.SQLException: Column 'JOB_ID' not found

我正在將Java8與JPA2 / Hibernate5,Spring4和mySQL一起使用。

如果有人可以提供幫助,我將不勝感激。

我有下表。

+--------+          +------------+        +---------+
| job    |          | person_job |        | person  |
+--------+          +------------+        +---------+
|  ID    |          |  JOB_ID    |        |   ID    |
|        |          |  PER_ID    |        |         |
+--------+          +------------+        +---------+

一個person可以做很多jobs

Job.java

@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "person_job", joinColumns = {
        @JoinColumn(name = "PER_ID", referencedColumnName = "ID") }, inverseJoinColumns = {
                @JoinColumn(name = "JOB_ID", referencedColumnName = "ID", unique = true) })
private Person person;

當直接對數據庫運行以下SQL時,它運行良好:

select
         e.*, p.*
     from
         www.job as e  
     inner join
         www.person_job as pj 
             on e.id=pj.JOB_ID  
     inner join
         www.person as p 
             on pj.PER_ID=p.ID  
...

當我運行本機查詢(使用上述sql)時,出現以下錯誤:

java.sql.SQLException:找不到列“ JOB_ID”。

Job.java,如果我換了JOB_IDPER_ID在周圍@JoinTable ,然后我得到:

java.sql.SQLException:找不到列“ PER_ID”。

因為上述SQL在數據庫上運行良好,所以我認為問題出在Job.java中的聯接配置上。


更新

我也有以下內容可以正常工作:

+--------+          +--------------+        +----------+
| job    |          | job_location |        | location |
+--------+          +--------------+        +----------+
|  ID    |          |  JOB_ID      |        |   ID     |
|        |          |  LOC_ID      |        |          |
+--------+          +--------------+        +----------+

一份job可以有很多locations

Jobs.java

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "job_location", joinColumns = {
        @JoinColumn(name = "JOB_ID", referencedColumnName = "ID") }, inverseJoinColumns = {
                @JoinColumn(name = "LOC_ID", referencedColumnName = "ID", unique = true) })
private Set<Location> locations;

更新

我僅在執行本機查詢時收到此錯誤。 當我做下面的例子時,它可以完美地工作。

    return (T) entityManager.find(entityClass, id);

我的本機查詢出問題了嗎? (如果我在Jobs.java上沒有person列,則此查詢有效)。

    StringBuilder sb = new StringBuilder();
    sb.append(" select e.* ");
    sb.append(" from ");
    sb.append("    www.job as e ");
    //sb.append(" inner join www.person_job as pj on e.id = pj.JOB_ID ");
    //sb.append(" inner join www.person as p on pj.PER_ID = p.id ");
    sb.append("  where e.id = :id ");
    Query q = entityManager.createNativeQuery(sb.toString(), JobWithDistance.class);
    q.setParameter("id", id);
    List<Job> jobs = (List<Job>) q.getResultList();

添加2條注釋掉的行沒有區別。

解:

我需要更改:

sb.append(" select e.* ");

sb.append(" select * ");

試試這個

// in Job entity
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "person_job", joinColumns = { @JoinColumn(name = "JOB_ID") }, 
                                inverseJoinColumns = { @JoinColumn(name = "PER_ID") }
)
private Person person;

...

// in Person entity
@OneToMany(mappedBy = "person")
private List<Job> jobs;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM