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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 @MappedSuperclass public class TemporalBehavior implements Serializable{ // mapping field1 // mapping field2 ... // }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
J'obtiens la génération du sql suivant par Hibernate :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 String query = "DELETE Chapter o WHERE o.id IN (:ids)"; return em.createQuery(query).setParameter("ids",ids).executeUpdate();
Et évidemment le message : "Column 'id' in where clause is ambiguous"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ( ? , ? )
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
Partager