有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)请问是哪错了呢.麻烦各位帮忙看看谢谢了!
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)请问是哪错了呢.麻烦各位帮忙看看谢谢了!
那么是不是你的这个列名id和数据库不相符合呢
还有在一对多的关系中。外键字段是在从属表的一端。即你对应的表Order 中。看有没有那字段
还有一种解决方式就是把表删除掉,修改配置文件让Hibernate帮你自动建表。
希望有帮助。
列名无效,没有customer_id这个列名
应该是这个吧cusomerId
应该是和类关联的XML文件配置有误
列名 'customer_id' 无效。
找下和这个ID有关的地方
看看是不是写错了
列名我前前后后对了好多遍了,而且我用的是HIBERNATE控制反转,也不可能写错的啊
表是这样的:
customer表:id name age
order 表:cusomer_id ordername order_id
楼主啊,看看你的
“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”这个难道他生成的时候就是这样吗?