IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

Mauvais SQL généré : Column 'id' in where clause is ambiguous


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1
    Par défaut 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 : 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 :

    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();
    J'obtiens la génération du sql suivant par Hibernate :
    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 (
                    ? , ?
                )
    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

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    un query "DELETE" qui génère un SQL contenant un "INSERT" ?
    vous avez dû rater une étape quelque part…

Discussions similaires

  1. unknown column'a'in where clause
    Par WALAA dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/04/2010, 20h54
  2. erreur : #1054 - Unknown column 'Martin' in 'where clause'
    Par éric1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2009, 15h29
  3. 1054 - Unknown column 'language_id' in 'where clause'
    Par Tonio_17000 dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/06/2009, 22h01
  4. [MySQL] unknown column "motClef" in WHERE clause
    Par JackBeauregard dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 11/09/2007, 17h15
  5. Unknown column 'xx' in 'where clause'
    Par SaeZ dans le forum Requêtes
    Réponses: 3
    Dernier message: 30/05/2006, 17h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo