Mauvais SQL généré : Column 'id' in where clause is ambiguous
Salut,
j'ai le message d'erreur suivant :
Column 'id' in where clause is ambiguous
Ce message est du au sql généré par jpa et hibernate.
Dans ma base de données j'ai ces deux tables :
Table Entity (id, field1, field2)
Table Chapter (id, name)
Mon mapping :
Code:
1 2 3 4 5 6 7
| @MappedSuperclass
public class TemporalBehavior implements Serializable{
// mapping field1
// mapping field2 ...
//
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| @Entity
@Table(name = "entity")
@Inheritance(strategy=InheritanceType.JOINED)
public abstract class EntityAff extends TemporalBehavior implements Nameable, Serializable {
/**
*
*/
private static final long serialVersionUID = 6883572560586578684L;
protected final Log logger = LogFactory.getLog(getClass());
protected Integer id;
public EntityAffiliation() {
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| @Entity
@Indexed
@Table(name="chapter")
public class Chapter extends EntityAff {
/**
*
*/
private static final long serialVersionUID = -6912952785079360312L;
@Field(index=Index.TOKENIZED, store=Store.NO)
@NotNull
@Size(min=1 , max=100)
protected String name;
public Chapter() {
}
public Chapter(String name) {
...
}
@Column(name="name", nullable=false, length=100)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
} |
Quand j'exécute la requête suivante :
Code:
1 2
| String query = "DELETE Chapter o WHERE o.id IN (:ids)";
return em.createQuery(query).setParameter("ids",ids).executeUpdate(); |
J'obtiens la génération du sql suivant par Hibernate :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Hibernate:
insert
into
HT_chapter
select
chapter0_.id as id_
from
chapter chapter0_
inner join
entity chapter0_1_
on chapter0_.id=chapter0_1_.id
where
id in (
? , ?
) |
Et évidemment le message : "Column 'id' in where clause is ambiguous"
Car 'id' dans la clause where peut référencer la table entity ou la table chapter
Le bon sql généré devrait être :
...
where
chapter0_.id in (
? , ?
)
Voyez-vous une erreur de mapping ? Or bien une solution à ce problème ?
Merci d'avance !
Nicolas