项目里面有Product和Factory两个类,各自的属性如下:
public class Factory {
private int factoryId;
private String factoryName;
public class Product {
private Integer id; //唯一性标识
private String name; //产品名称
private Double price; //产品价格
private Factory factory; //生产商
其它的get set方法都省掉了。
然后,Product.hbm.xml文件里factory的映射如下:
<many-to-one name="factory" class="com.wh.factory.Factory">
<column name="factoryid"/>
</many-to-one>
在使用Hibernate时,获取对象语句如下:
session = HibernateInitialize.getSession();
session.beginTransaction();
Product product = (Product)session.get(Product.class,new Integer("1"));
System.out.println("产品名称:"+product.getName());
System.out.println("产品价格:"+product.getPrice()+"元");
System.out.println("生产商:"+product.getFactory().getFactoryName());
session.getTransaction().commit();
但是报错。理了理思路,是在调用session.get方法的时候,Product的配置文件里的factory属性对应的字段不存在。
即不存在product.factoryid这个字段。但是已经设置了product.factory字段的外键是factory.factoryid。这里需要怎么解决呢?
求帮助!
------解决方案--------------------
只要你配置好了,这样写是不会出错的。你理了理之后的思路是不对的,关联映射是根据配置决定的,session.get本身就是立即加载,不存在有没有的问题。你把实体的Integer改成int试试,代码这样:
Product product = (Product)session.get(Product.class,1);
------解决方案--------------------
配置没问题,关键是你的表建对没有。
Product表中是否有factory_id这一列。