<hibernate-mapping>
    <class name="com.crm.report.entity.Orders" table="orders">
        <id name="odrId" type="java.lang.Long">
            <column name="odr_id" />
            <generator class="assigned" />
        </id>
        <property name="odrCustomer" type="java.lang.String">
            <column name="odr_customer" length="100" not-null="true" />
        </property>
        <property name="odrDate" type="java.util.Date">
            <column name="odr_date" length="23" not-null="true" />
        </property>
        <property name="odrAddr" type="java.lang.String">
            <column name="odr_addr" length="200" />
        </property>
        <property name="odrStatus" type="java.lang.String">
            <column name="odr_status" length="1" not-null="true" />
        </property>
        <set name="ordersLines" inverse="true" lazy="false">
            <key>
                <column name="odd_order_id" not-null="true" />
            </key>
            <one-to-many class="com.crm.report.entity.OrdersLine" />
        </set>
    </class>
</hibernate-mapping>为什么老是报这个异常?
2010-04-19 10:19:05,859 ERROR [org.hibernate.util.JDBCExceptionReporter] - 对象名 'orders' 无效。

解决方案 »

  1.   

    数据库里有没有orders这个表?
      

  2.   

    <class name="com.crm.report.entity.Orders" table="orders">把table="orders" 改成table="t_orders"orders可能跟关键字有关
      

  3.   

    数据库中对应的表也要改为t_orders
      

  4.   

    这个我也改了.我这个工程用到了2个数据库,
    <!-- 数据源一 -->
    <bean id="crmDataSource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
    value="net.sourceforge.jtds.jdbc.Driver">
    </property>
    <property name="url"
    value="jdbc:jtds:sqlserver://localhost:1467/jb_crm_team0">
    </property>
    <property name="username" value="sa"></property>
    <property name="password" value="sa2005"></property>
    </bean>
    除了这里面的jb_crm_team0,还有一个数据库,而且orders表也是在另一个数据库里的,跟这个有关系吗?
      

  5.   

    orders表存在,但是在另一个数据库里面
      

  6.   


    可能就是做不到orders的问题在访问orders的时候就要这样了  数据库.orders
      

  7.   

    http://blog.sina.com.cn/s/blog_4e8d68f9010081r0.html
      

  8.   

    你要把database schema 加进去xml, 才能找到那个表
      

  9.   

    -.-你想想,要是不用hibernate你用的是JDBC你会怎么去访问orders表?
    根本就是两个URL假设orders表在XE2库中访问oracle的XE数据库
    jdbc:oracle:thin:@localhost:1521:XE访问oracle的XE2数据库
    jdbc:oracle:thin:@localhost:1521:XE2你觉得用第一个URL获得的connection能找到XE2的orders表么?
      

  10.   

    <class name="com.crm.report.entity.Orders" table="dbo.orders">
      

  11.   

    配置的时候肯定加载的是一个数据库,不同的数据库加载的URL不同,或者驱动不同,肯定找不见了
      

  12.   

    在映射文件中设scheme属性指向你的数据库,要指明是用哪个数据库
      

  13.   

    <mapping resource="你的 路径/Orders.hbm.xml" />
      

  14.   

    使用多重配置,比如针对天津和北京,我们分别编写对应的映射文件<?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!--
    Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
    <class name="com.csc.poimanager.dao.Poi" table="POI" id="P_BEIJING" schema="P_BEIJING">
    <id name="poiId" type="java.lang.Long">
    <column name="POI_ID" precision="10" scale="0" />
    <generator class="increment" />
    </id>
    <property name="cnName" type="java.lang.String">
    <column name="CN_NAME" length="1000" />
    </property>
    </class>
    <class name="com.csc.poimanager.dao.Poi" id="P_TIANJIN" table="POI" schema="P_TIANJIN">
    <id name="poiId" type="java.lang.Long">
    <column name="POI_ID" precision="10" scale="0" />
    <generator class="increment" />
    </id>
    <property name="cnName" type="java.lang.String">
    <column name="CN_NAME" length="1000" />
    </property>
    </class>
    </hibernate-mapping>配置文件除了SCHEMA和ID不同外,其它的完全相同,那么如何使用呢?sessionFactory.getBean("P"+placeName);这样就可以实现动态调用了。至于placeName,可以通过前台调用程序传递过来,也可以放到ThreadLocal里面,后者更具有通用性,而且对以前的程序修改量最少,因为只需要写一个getPlaceName()得方法就行了。方法3:修改数据库的连接属性,将以前指向SchemaA的改成指向SchemaB,这需要一些高权限的账号做这些事情。其实,还有一个更简单的方法,那就是自己继承一个DataSource,然后在方法里面,根据ThreadLocal的参数,返回不同的数据连接。比如如果是BEIGJING,则返回 BeiJingDatasource的连接,如果是TIANJIN,则返回TianJinDatasource的连接。系统在使用时,肯定会从DataSource里面获取连接,我们在内部做了分配,自然前台运行结果也就分配开了。提示:在你的DataSource里面可以包含Map<String,DataSource>这样的结构,来做内部的转发。