有customer 和order两个表
public class Customer implements java.io.Serializable { // Fields private Integer id;
private String name;
private Long age;
private Set<Order>orders;
//省去SET,GET方法
public class Order implements java.io.Serializable { // Fields private Integer orderId;
private Integer cusomerId;
private String ordername;
private Customer customer;
//省去GET SET方法
由于我是用MYECLIPSE控制反转生成的HBM文件,所以不存在属性配错的情况我在CUSTOMER的HBM文件是这样配的
<set name="orders"  inverse="true" cascade="all">
<key column="customer_id" />
<one-to-many class="com.viven.test.domain.Order" />
</set>ORDER里面是这样配的
 <many-to-one name="customer" column="customer_id" class="com.viven.test.domain.Customer" not-null="true"/>
测试:
Customer c = new Customer();
c.setAge(new Long(11));
c.setName("fjl");

Order order = new Order();
order.setOrdername("fjl-order");
order.setCustomer(c);

Set<Order> set = new HashSet<Order> ();
set.add(order);
c.setOrders(set);

i.save(c);
事务已经用拦截器做了,测试是没问题的
然后报2009-10-26 18:19:37,171 ERROR JDBCExceptionReporter:78 [main] - 列名 'customer_id' 无效。
Exception in thread "main" org.springframework.dao.InvalidDataAccessResourceUsageException: could not insert: [com.viven.test.domain.Order]; nested exception is org.hibernate.exception.SQLGrammarException: could not insert: [com.viven.test.domain.Order]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:615)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:690)
at cn.com.inspiresw.feynman.dao.BaseDAOHibernate.save(BaseDAOHibernate.java:167)
at cn.com.inspiresw.feynman.service.BaseHibernateManager.save(BaseHibernateManager.java:93)请问是哪错了呢.麻烦各位帮忙看看谢谢了!

解决方案 »

  1.   

    一年没用hibernate了.感觉应该是配置文件出错了...
      

  2.   

    既然报的是“2009-10-26 18:19:37,171 ERROR JDBCExceptionReporter:78 [main] - 列名 'customer_id' 无效。 ”
    那么是不是你的这个列名id和数据库不相符合呢
      

  3.   

    你出的这个错误已前经常遇到,看看对应的表里有没有'customer_id' 字段啊。
    还有在一对多的关系中。外键字段是在从属表的一端。即你对应的表Order 中。看有没有那字段
    还有一种解决方式就是把表删除掉,修改配置文件让Hibernate帮你自动建表。
    希望有帮助。
      

  4.   

    看你类里面的变量,两张表之间的外键应该是cusomerId吧,怎么再配置文件里又来个cusomer_Id?而且private Set <Order>orders还可以这样用么?我每次都是private Set <Order>orders=new Hashset();
      

  5.   

    ERROR JDBCExceptionReporter:78 [main] - 列名 'customer_id' 无效。
    列名无效,没有customer_id这个列名
    应该是这个吧cusomerId
      

  6.   

    ERROR JDBCExceptionReporter:78 [main] - 列名 'customer_id' 无效。
    应该是和类关联的XML文件配置有误
      

  7.   

     列名 'customer_id' 无效。 
     列名 'customer_id' 无效。 
    找下和这个ID有关的地方 
    看看是不是写错了
      

  8.   

    列名 'customer_id' 无效应该是列名中有'_'出现的问题,类翻转可能将列名翻译成'customerid',所以会报这列不存在 ,你将'_'去掉应该就没问题了
      

  9.   

    首先谢谢各位的回答
    列名我前前后后对了好多遍了,而且我用的是HIBERNATE控制反转,也不可能写错的啊
    表是这样的:
    customer表:id name age
    order 表:cusomer_id ordername order_id
      

  10.   


    楼主啊,看看你的
    “private Integer cusomerId;”
    这个“cusomerId”再看看你的
    “我在CUSTOMER的HBM文件是这样配的
    <set name="orders"  inverse="true" cascade="all">
    <key column="customer_id" />
    <one-to-many class="com.viven.test.domain.Order" />
    </set>ORDER里面是这样配的
    <many-to-one name="customer" column="customer_id" class="com.viven.test.domain.Customer" not-null="true"/>

    这个“customer_id”这个难道他生成的时候就是这样吗?