2010-05-06 3 views
0

J'essaie d'utiliser les hibernates construits dans la fonction createsql mais il semble qu'il n'aime pas la requête suivante. J'ai le sentiment que c'est à partir de l'instruction select imbriquée, mais je ne suis pas sûr. La sélection interne est utilisée ailleurs dans le code et renvoie des résultats corrects.Hibernate CreateSQL Query Problème

Ceci est mon application pour la première table:

<hibernate-mapping> 

    <class name="org.efs.openreports.objects.Table" table="table"> 

     <id name="id" column="other_number" type="java.lang.Integer"> 
      <generator class="native"/> 
     </id> 

     <property name="number" column="number" not-null="true" unique="true"/> 
     <property name="location" column="location" not-null="true" unique="true"/> 

    </class> 

</hibernate-mapping> 

Et le .java

public class Table implements Serializable 
{ 
    private Integer id;//panel_facility 
    private Integer number; 
    private String location; 

    public Table() 
    { 
    } 

    public void setId(Integer id) 
    { 
    this.id = id; 
    } 

    public Integer getId() 
    { 
    return id; 
    } 

    public void setNumber(Integer number) 
    { 
    this.number = number; 
    } 

    public Integer number() 
    { 
    return number; 
    } 

    public String location() 
    { 
    return location; 
    } 

    public void setLocation(String location) 
    { 
     this.location = location; 
    } 

} 

Toutes les suggestions?

Modifier (cartographie Ajouté)

+0

Quelle est l'exception? –

+0

Je reçois un nom de colonne non valide pour other_number sur la première table. Le nom de la colonne est orthographié correctement et il est dans la base de données. Je posterai mes correspondances peut-être que c'est là-dedans. – Shaded

Répondre

1

vous devez sélectionner l'identifiant aussi bien dans la sélection externe. (et ne pas utiliser la concaténation de chaîne dans votre requête)

Utilisez quelque chose comme ça, mise en veille prolongée insérera les noms de la colonne de droite:

List l = hibernateSession.createSQLQuery("SELECT {t.*} FROM table t 
WHERE other_number IN 
(SELECT f.number FROM table2 AS f JOIN table3 AS g on f.number = g.number 
WHERE g.other_number = :var) 
ORDER BY number") 
.addEntity("t", Table.class).setParameter("var", actualObject).list(); 
+0

Génial! ça a marché comme un charme! Merci beaucoup! – Shaded