一方的xml:<hibernate-mapping>
  <class catalog="hsly" name="com.hsly.hibernate.Product" 
  schema="dbo" table="Product" dynamic-update="true">
    <id name="productId" type="int">
      <column name="productId"/>
      <generator class="native"/>
    </id>
    <property name="productNo" type="string">
      <column length="50" name="productNo"/>
    </property>
    <property name="productName" type="string">
      <column length="50" name="productName"/>
    </property>
    <property name="price" type="big_decimal">
      <column name="price" precision="18"/>
    </property>
    <property name="count" type="java.lang.Integer">
      <column name="_count"/>
    </property>
    <many-to-one column="productClassId" name="productClass" not-null="true"/>
  </class>
  <sql-query name="test">
    <return alias="product" class="com.hsly.hibernate.Product"/>
    select a.* from Product a,ProductClass b where a.productClassId=b.productClassId and b.productClassName='er'
  </sql-query>
  <sql-query name="test2">
    <return alias="product" class="com.hsly.hibernate.ProductClass"/>
    select * from ProductClass
  </sql-query>
</hibernate-mapping>多方的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">
<!-- Generated 2009-5-30 18:30:49 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
  <class catalog="hsly" name="com.hsly.hibernate.ProductClass" schema="dbo" table="ProductClass">
    <id name="productClassId" type="int">
      <column name="productClassId"/>
      <generator class="native"/>
    </id>
    <property name="productClassName" type="string">
      <column length="50" name="productClassName"/>
    </property>
    <property name="order" type="java.lang.Integer">
      <column name="_order"/>
    </property>
    <property name="parentId" type="java.lang.Integer">
      <column name="parentId"/>
    </property>
    <bag name="products" inverse="true" cascade="all" order-by="productId" table="Product">
      <key column="productClassId"/>
      <one-to-many class="com.hsly.hibernate.Product"/>
    </bag>
  </class>
</hibernate-mapping>Main方法里的调用代码如下:
Session sess=HibernateUtil.getSessionFactory().openSession();
        
        Transaction tx=sess.beginTransaction();        ProductClass pc=(ProductClass)sess.load( ProductClass.class,3);        Product p=new Product();
        p.setProductName("化妆品");
        p.setCount(22);
        p.setPrice(new BigDecimal(33.33));
        p.setProductNo("23");
        p.setProductClass(pc);
        pc.getProducts().add(p);
        sess.update(pc);
        tx.commit();出错信息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
        at java.lang.System.arraycopy(Native Method)
        at com.microsoft.jdbc.sqlserver.tds.TDSRPCParameter.write(Unknown Source)
        at com.microsoft.jdbc.sqlserver.tds.TDSRPCRequest.submitRequest(Unknown Source)
        at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.execute(Unknown Source)
        at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
        at com.microsoft.jdbc.base.BaseStatement.executeInternal(Unknown Source)
        at com.microsoft.jdbc.base.BasePreparedStatement.execute(Unknown Source)
        at org.hibernate.id.IdentityGenerator$InsertSelectDelegate.executeAndExtract(IdentityGenerator.java:108)
        at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
        at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
        at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
        at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:94)
        at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
        at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
        at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
        at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:218)
        at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
        at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:296)
        at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:242)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:219)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
        at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
        at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:131)
        at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:122)
        at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
        at com.hsly.test.Main.main(Main.java:32)
Java Result: 1

解决方案 »

  1.   

    出错信息: 
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException 
            at java.lang.System.arraycopy(Native Method) 
     
     楼主你仔细看下你写的那个main方法里,这句是报数组下标越界异常,错在调用本地的
    一个方法arraycopy(Native Method) ,你看下你的方法调用有没有错,建议看下相关
    帮助文档。
      

  2.   

    弄明白了,是p.setPrice(new BigDecimal(33.33)); 这一句出了问题,和hibernate夹杂在一起,以至于我以为是一对多出了问题,谢谢2楼提醒。