[英]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_ID
和PER_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.