gpt4 book ai didi

java.sql.SQLException : Column 'JOB_ID' not found

转载 作者:行者123 更新时间:2023-11-29 11:19:05 25 4
gpt4 key购买 nike

我将 Java8 与 JPA2/Hibernate5、Spring4 和 mySQL 结合使用。

如果有人能提供帮助,我将不胜感激。

我有下表。

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

一个可以拥有许多工作

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

当我运行 native 查询(使用上述 sql)时,出现以下错误:

java.sql.SQLException: Column 'JOB_ID' not found.

Job.java中,如果我在@JoinTable中交换JOB_IDPER_ID,那么我得到:

java.sql.SQLException: Column 'PER_ID' not found.

由于上述 SQL 在数据库上运行良好,我认为问题在于 Job.java 中的连接配置。

<小时/>

更新

我还有以下可以正常工作的内容:

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

一个工作可以有多个地点

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;

更新

只有在执行 native 查询时才会出现此错误。当我执行以下 fr 示例时,它运行得很好。

    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 * ");

关于java.sql.SQLException : Column 'JOB_ID' not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39251312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com