Hibernate学习 笔记(二)

    对数据库的操作无非就是CRUDCreateReadUpdateDelete)四种操作了,昨天弄了RRead)操作,基本上能实现我所期望的功能了。回想一下数据库的操作,貌似就R操作麻烦点,因为它可细分为很多操作,比如单条记录的查询、分页查询、全部查询等。而其他的三种操作,方法较单一,代码重用率比较高。

 

    对于Create操作,第一要保证,插入的数据都符合数据库表的约束条件,特别是在多对一的外键约束下,比如:新闻和新闻类型是多对一的关系,在插入新闻信息时,由于MyEclipse自动生成的News.hbm.xml配置文件中新闻类型号typeId是以新闻类型持久类对象存在,而不是简单的以一个Integer/int对象存在,并且此对象不能为空,因为一则新闻必须指定其所属的类型,所以,我们在插入新闻信息时,就必须为新闻类对象(处于自由状态的对象)的newstype属性指定一个实例,其中news.newstype.id必须指定其一个合法(存在)的新闻类型id号,而newstype的其他属性在没有设置级联关系的情况下,可以不赋值,若有级联关系,则得按照各属性的约束赋值了。

 

    Update操作和Create操作貌似完全一致了,只是数据源有点不同而已。呵呵。

 

    Delete操作时,删除的必须是一持久对象,也就是说,在删除之前,必须先将其加载(get方法)为一持久对象,然后在用session.delete(Object)删除此对象,而不能简单的像SQLDelete语句那样,只指定要删除对象的主键值。这样做有一个很明显的优势,可以很方便的实现级联操作。当然要结合延迟加载机制,才可以得到最佳的效果。在配置文件里将lazy设为true,当需要级联操作的地方调用Hibernate.initialize(Obejct)方法强制加载集合属性等,再执行级联操作。

 

    今天还发现MyEclipse自动生成的HibernateSessionFactory类的closeSession方法有一处可以改善的地方。代码如下:

    public static void closeSession() throws HibernateException {

        Session session = (Session) threadLocal.get();

        threadLocal.set(null);

 

        if (session != null) {

            if(session.isOpen())

               session.close();

        }

    }

再关闭session之前先判断其是否已经关闭,若没关闭则执行关闭操作,若已关闭了则跳过。这样是不是更好点呢,不过也有可能引来一些极其隐蔽的错误。呵呵。

 

    要熟练Hibernate是一长期工程啊,不过这两天所弄的这些东西,基本上能满足一般需求了,至少升级我现有的这个网站是可以了。哈哈。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值