org.hibernate.exception.GenericJDBCException: could not get table metadata: IdCard
Caused by: java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引
我写一对多联系的时候出现了这两个错误 我用的是sql server2005 不知道是什么原因?
本人是菜鸟 希望高手们不吝赐教..

解决方案 »

  1.   

    不好意思 昨天忘贴出来了
    现在补充:
    SLF4J: The requested version 1.5.11 by your slf4j binding is not compatible with [1.5.5, 1.5.6, 1.5.7, 1.5.8]
    SLF4J: See http://www.slf4j.org/codes.html#version_mismatch for further details.
    16 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.5.0-Final
    16 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
    16 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
    16 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
    109 [main] INFO org.hibernate.cfg.Configuration - configuring from resource: /hibernate.cfg.xml
    109 [main] INFO org.hibernate.cfg.Configuration - Configuration resource: /hibernate.cfg.xml
    203 [main] INFO org.hibernate.cfg.Configuration - Reading mappings from resource : myTest/hibernate.hbm.xml
    266 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: myTest.test1 -> test1
    281 [main] INFO org.hibernate.cfg.Configuration - Reading mappings from resource : myTest/Product1.hbm.xml
    297 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: myTest.Product1 -> Product1
    312 [main] INFO org.hibernate.cfg.Configuration - Reading mappings from resource : myTest/IdCard.hbm.xml
    312 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: myTest.IdCard -> IdCard
    328 [main] INFO org.hibernate.cfg.Configuration - Reading mappings from resource : myTest/student1.hbm.xml
    328 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: myTest.student1 -> student1_db
    344 [main] INFO org.hibernate.cfg.Configuration - Reading mappings from resource : myTest/class1.hbm.xml
    344 [main] INFO org.hibernate.cfg.HbmBinder - Mapping class: myTest.class1 -> class1_db
    391 [main] INFO org.hibernate.cfg.Configuration - Configured SessionFactory: null
    406 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Using Hibernate built-in connection pool (not for production use!)
    406 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - Hibernate connection pool size: 20
    406 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - autocommit mode: false
    406 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - using driver: sun.jdbc.odbc.JdbcOdbcDriver at URL: jdbc:odbc:mydata
    406 [main] INFO org.hibernate.connection.DriverManagerConnectionProvider - connection properties: {user=, password=****}
    1719 [main] INFO org.hibernate.cfg.SettingsFactory - RDBMS: Microsoft SQL Server, version: 09.00.1399
    1719 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC driver: JDBC-ODBC Bridge (SQLSRV32.DLL), version: 2.0001 (03.85.1117)
    1766 [main] INFO org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.SQLServerDialect
    1781 [main] INFO org.hibernate.engine.jdbc.JdbcSupportLoader - Disabling contextual LOB creation as JDBC driver reported JDBC version [2] less than 4
    1781 [main] INFO org.hibernate.transaction.TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions)
    1781 [main] INFO org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic flush during beforeCompletion(): disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Automatic session close at end of transaction: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Scrollable result sets: enabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - JDBC3 getGeneratedKeys(): disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Connection release mode: auto
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Default batch fetch size: 1
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Generate SQL with comments: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL updates by primary key: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Order SQL inserts for batching: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
    1781 [main] INFO org.hibernate.hql.ast.ASTQueryTranslatorFactory - Using ASTQueryTranslatorFactory
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Query language substitutions: {}
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - JPA-QL strict compliance: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Second-level cache: enabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Query cache: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Cache region factory : org.hibernate.cache.impl.NoCachingRegionFactory
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Optimize cache for minimal puts: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Structured second-level cache entries: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Echoing all SQL to stdout
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Statistics: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Named query checking : enabled
    1781 [main] INFO org.hibernate.cfg.SettingsFactory - Check Nullability in Core (should be disabled when Bean Validation is on): enabled
    1828 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
    2016 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
    2016 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - Running hbm2ddl schema update
    2016 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - fetching database metadata
    2016 [main] INFO org.hibernate.tool.hbm2ddl.SchemaUpdate - updating schema
    2016 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: S1002
    2016 [main] ERROR org.hibernate.util.JDBCExceptionReporter - [Microsoft][ODBC SQL Server Driver]无效的描述符索引
    2016 [main] ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - could not complete schema update
    org.hibernate.exception.GenericJDBCException: could not get table metadata: IdCard
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)
    at org.hibernate.tool.hbm2ddl.DatabaseMetadata.getTableMetadata(DatabaseMetadata.java:128)
    at org.hibernate.cfg.Configuration.generateSchemaUpdateScript(Configuration.java:1030)
    at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:187)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:384)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385)
    at myTest.insert_m_o.main(insert_m_o.java:19)
    Caused by: java.sql.SQLException: [Microsoft][ODBC SQL Server Driver]无效的描述符索引
    at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3907)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5698)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:354)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:411)
    at org.hibernate.tool.hbm2ddl.TableMetadata.<init>(TableMetadata.java:55)
    at org.hibernate.tool.hbm2ddl.DatabaseMetadata.getTableMetadata(DatabaseMetadata.java:113)
    ... 5 more
    2016 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Warning: 5701, SQLState: 01000
    2016 [main] WARN org.hibernate.util.JDBCExceptionReporter - [Microsoft][ODBC SQL Server Driver][SQL Server]已将数据库上下文更改为 'mydata'。
    2016 [main] WARN org.hibernate.util.JDBCExceptionReporter - SQL Warning: 5703, SQLState: 01000
    2016 [main] WARN org.hibernate.util.JDBCExceptionReporter - [Microsoft][ODBC SQL Server Driver][SQL Server]已将语言设置更改为 简体中文。
    这是我出现的问题!以下是我的Order1.java
    package myTest;
    public class Order1
    {
    private int order_id;
    private int member_id;
    private int number;
    member1 m1;
    public member1 getM1() {
    return m1;
    }
    public void setM1(member1 m1) {
    this.m1 = m1;
    }
    public int getOrder_id() {
    return order_id;
    }
    public void setOrder_id(int orderId) {
    order_id = orderId;
    }
    public int getMember_id() {
    return member_id;
    }
    public void setMember_id(int memberId) {
    member_id = memberId;
    }
    public int getNumber() {
    return number;
    }
    public void setNumber(int number) {
    this.number = number;
    }

    }
    Order1.hbm.xml如下:
    <?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">
    <hibernate-mapping>
    <class name="myTest.Order1" table="t_Order1">
    <id name="order_id" column="order_id"/>
    <generator class="increment"/>
    </id>
    <property name="number"/>
    <property name="member_id"/>
    <many-to-one name="m1"
                         column='member_id'
                         class='myTest.member1'/>
    </class>
    </hibernate-mapping>
      

  2.   


    member1.java如下:
    package myTest;
    import java.util.HashSet;
    import java.util.Set;
    public class member1 
    {
    private Set orders_set=new HashSet();
    private int member_id;
    private String name;
    private char sex;
    private int age;
    public Set getOrders_set() {
    return orders_set;
    }
    public void setOrders_set(Set ordersSet) {
    orders_set = ordersSet;
    }

    public int getMember_id() {
    return member_id;
    }
    public void setMember_id(int memberId) {
    member_id = memberId;
    }

    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public char getSex() {
    return sex;
    }
    public void setSex(char sex) {
    this.sex = sex;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    }member1.hbm.xml为:
    <?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">
    <hibernate-mapping>
    <class name="myTest.member1" table="t_member">
    <id name="member_id" column="member_id"/>
    <generator class="increment"/>
    </id>
    <property name="name"/>
    <property name="sex"/>
    <property name="age"/>
    <set name="orders_set" order-by="order_id" cascade="all">
    <key column="member_id"/>
    <one-to-many class="myTest.Order1"/>
    </set>
    </class>
    </hibernate-mapping> 这是持久化的操作:
    insert_m_o.javapackage myTest;
    import java.util.HashSet;
    import java.util.Set;
    import org.hibernate.*;
    import org.hibernate.cfg.Configuration;
    public class insert_m_o 
    {
    public static void main(String args[])
    {
    member1 m1=new member1();
    Order1 o1=new Order1();
    Order1 o2=new Order1();
    m1.setAge(12);
    m1.setName("小龙");
    m1.setSex('m');
    o1.setNumber(23);
    o2.setNumber(54);
    Configuration cg=new Configuration().configure();
    SessionFactory sf=cg.buildSessionFactory();
    Session session=sf.openSession();
    Transaction ts=null;
    try
    {
    ts=session.beginTransaction();
    o1.setM1(m1);
    o2.setM1(m1);
    m1.getOrders_set().add(o1);
    m1.getOrders_set().add(o2);
    session.save(m1);
    session.flush();
    ts.commit();
    }
    catch(HibernateException e )
    {
    ts.rollback();
    }
    finally
    {
    session.close();
    }
    }
    }搞不懂了....