J'utilise Java8 avec JPA2/Hibernate5, Spring4 et mySQL.java.sql.SQLException: Colonne 'JOB_ID' introuvable
Si quelqu'un peut aider, je l'apprécierais.
J'ai les tableaux suivants.
+--------+ +------------+ +---------+
| job | | person_job | | person |
+--------+ +------------+ +---------+
| ID | | JOB_ID | | ID |
| | | PER_ID | | |
+--------+ +------------+ +---------+
Un person
peut avoir beaucoup 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 suivante fonctionne très bien quand je le lance directement contre la base de données:
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
...
Quand je lance une requête native (avec SQL ci-dessus), J'obtiens l'erreur suivante:
java.sql.SQLException: Column 'JOB_ID' not found.
Dans Job.java, si j'échanger les JOB_ID
et PER_ID
autour du @JoinTable
, puis-je obtenir:
java.sql.SQLException: Column 'PER_ID' not found.
Comme ci-dessus SQL fonctionne très bien contre la base de données, je pense que le problème est avec JOIN configuration emploi .java.
MISE À JOUR
J'ai également le suivant qui fonctionne correctement:
+--------+ +--------------+ +----------+
| job | | job_location | | location |
+--------+ +--------------+ +----------+
| ID | | JOB_ID | | ID |
| | | LOC_ID | | |
+--------+ +--------------+ +----------+
Un job
peut avoir beaucoup 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;
MISE À JOUR
-je obtenir que cette erreur quand j'exécute une requête native. Quand je fais l'exemple suivant, ça fonctionne parfaitement.
return (T) entityManager.find(entityClass, id);
Y at-il un problème avec ma requête native? (Cette requête fonctionne si je n'ai pas la colonne person
sur Jobs.java
). Ajouter les deux lignes commentées ne fait pas de différence.
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();
OK, je l'ai modifié ma réponse. Pouvez-vous essayer avec ces changements? –
Je reçois: 'SQLException: Column 'PER_ID' non trouvé.' Je pense que cela fait la même chose que ma configuration originale. – Richard
Autre chose dans la pile de pile? Quelque chose qui indiquerait où Hibernate recherche la colonne 'PER_ID'? –