初学hibernate遇到的几个问题的解决

参考书是孙卫琴的<精通Hibernate>

hibernate 3 + mysql 5.0

1 书上的例子第2章 初始化 hibernate Configuration实例

代码如下:

Configuration config = new Configuration();

config.addClass("Customer.class");

SessionFactory sessionfactory = config.buildSessionFactory();

配置文件是 hibernate.properties

运行出错 :提示为

org.hibernate.HibernateException: database product name cannot be null

显然是配置文件的问题

我用的配置文件是 hibernate.cfg.xml

修改为以下代码 成功运行

Configuration config = new Configuration().configure();
SessionFactory sessionFactory = config.buildSessionFactory();

原因:使用了xm作为配置文件,而没有选择properties文件,应该使用new Configuration().config();

2 书上例子 第六章一对多映射

customer.hbm.xml 中

原代码为

<hibernate-mapping>
    <class name="demo1.Customer" table="CUSTOMERS">
        <id name="id" type="long" column="ID">
            <generator class="increment" />
        </id>
        <property name="name" type="string">
            <column name="NAME" length="15" />
        </property>
    </class>
</hibernate-mapping>

此时执行其Business.java时

Customer customer = (Customer) session.load(Customer.class,
                    new Long(customer_id));

出现如下错误

1Exception in thread "main" java.lang.NullPointerException
2 at org.hibernate.tuple.AbstractTuplizer.createProxy(AbstractTuplizer.java:249
)
3 at org.hibernate.persister.entity.BasicEntityPersister.createProxy(BasicEntityPersister.java:2831
)
4 at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:218
)
5 at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:163
)
6 at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:79
)
7 at org.hibernate.impl.SessionImpl.load(SessionImpl.java:603
)
8 at org.hibernate.impl.SessionImpl.load(SessionImpl.java:596
)

修改为

<hibernate-mapping default-lazy="false">
<class name="demo1.Customer" table="CUSTOMERS">
        <id name="id" type="long" column="ID">
            <generator class="increment" />
        </id>
        <property name="name" type="string">
            <column name="NAME" length="15" />
        </property>
    </class>
</hibernate-mapping>

问题解决

原因在于Hibernate 3.0 与Hibernate2.1的源代码是不兼容的
在Hibernate2.1中,lazy属性的默认值为“false”,而在Hibernate3.0中,lazy属性的默认值为“true”。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值