hibernate失败映射两个表

时间:2010-03-23 15:51:20

标签: java hibernate jersey hibernate-mapping jboss-weld

我想了解它是如何可能的: 在我使用一张桌子之前一切正常, 当我映射另一个表失败时,如下所示:

Glassfish开始

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)
...

配置

表1

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD
3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <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>

表2

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<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>

连接的东西 ...

    <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();
    }
}

你有什么建议吗?

1 个答案:

答案 0 :(得分:2)

根据您的映射,您的类名是Impianto,因此您的查询应该是“来自Impianto ...”而不是“来自impianti ...” - 从类名中选择,而不是从表名中选择。