views:

214

answers:

1

Hi guys, I'd like to understand how it is possible: Until I was working with one table everything worked fine, when I have mapped another table it fails as shown below:

Glassfish start

INFO: configuring from resource: /hibernate.cfg.xml INFO: Configuration resource: /hibernate.cfg.xml INFO: Reading mappings from resource : hibernate_centrale.hbm.xml //first table INFO: Mapping class: com.italtel.patchfinder.objects.centrale -> centrale INFO: Reading mappings from resource : hibernate_impianti.hbm.xml //second table INFO: Mapping class: com.italtel.patchfinder.objects.Impianto -> impianti INFO: Configured SessionFactory: null

INFO: schema update complete INFO: Hibernate: select centrale0_.id as id0_, centrale0_.name as name0_, centrale0_.impianto as impianto0_, centrale0_.servizio as servizio0_ from centrale centrale0_ group by centrale0_.name INFO: Hibernate: select centrale0_.id as id0_, centrale0_.name as name0_, centrale0_.impianto as impianto0_, centrale0_.servizio as servizio0_ from centrale centrale0_ where centrale0_.name='ANCONA' order by centrale0_.name asc

//Error org.hibernate.hql.ast.QuerySyntaxException: impianti is not mapped [from impianti where impianto='SD' order by modulo asc] at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181) .....

config

table1

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt; <hibernate-mapping>
    <class name="com.italtel.patchfinder.objects.Impianto" table="impianti">
        <id column="id" name="id">
            <generator class="increment"/>
        </id>
        <property name="impianto"/>
        <property name="modulo"/>
    </class> </hibernate-mapping>

table2

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&gt;
<hibernate-mapping>
    <class name="com.italtel.patchfinder.objects.centrale" table="centrale">
        <id column="id" name="id">
            <generator class="increment"/>
        </id>
        <property name="name"/>
        <property name="impianto"/>
        <property name="servizio"/>
    </class>
</hibernate-mapping>

connection stuff ...

    <property name="hbm2ddl.auto">update</property>
    <mapping resource="hibernate_centrale.hbm.xml"/>
    <mapping resource="hibernate_impianti.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

`

    public List<centrale> loadAll() {
        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();
        return session.createQuery("from centrale group by name").list();
    }

    public List<centrale> loadImplants(String centrale) {
        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();
        return session.createQuery("from centrale where name='" + centrale + "' order by name asc").list();
    }

    public List<Impianto> loadModules(String implant) {
        Session session = sessionFactory.getCurrentSession();
        session.beginTransaction();
        return session.createQuery("from impianti where impianto='" + implant + "' order by modulo asc").list();
    }
}

Do you have some advice? Thanks in advance Sorry for the previous format..

+2  A: 

According to your mapping, your class name is Impianto, so your query should be "from Impianto..." not "from impianti..." - select from the class name, not the table name.

kem
Was just going to post this. Also, for consistency, it would be good to capitalize your class names.
Jeremy
yes! I've corrected any mistakes thanks guys.
sebbalex