Tag: hibernate3预览模式: 普通 | 列表
10-03
08

解决Hibernate 3不支持 "&" 运算的SQL语句

按位与运算(&)在许多数据库中都是支持的,遗憾的是,Hibernate 3在HQL中不支持&运算,如果你写了如下的HQL:

where a.id & :mask = :target


则Hibernate报错:exception: unexpected char: '&'.

如何解决此问题?方法是利用Hibernate支持的自定义SQLFunction,定义一个bitand(a,b)的SQLFunction,然后,自己写一个解释器,生成a & b的SQL语句。

要实现一个自定义的SQLFunction,必须实现SQLFunction接口:

查看更多...

Tags: 运算 hibernate3 SQL

分类:Hibernate | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 438
08-06
27

Transaction not successfully started解决

Hibernate升级到3以后,我发现原有的HibernateException异常被Hibernate自动处理了,于是把try/catch/finally去掉,结果就出了这么个异常,原因很简单,看代码:

catch块中的代码应该是:
if (tx!=null) {
tx.rollback();
}
throw e;


否则通不过编译!应为抛出了异常后不能再有其它语句.

查看更多...

Tags: Transaction started hibernate3

分类:Hibernate | 固定链接 | 评论: 1 | 引用: 0 | 查看次数: 1718
08-06
02

Hibernate3:Unknown entity: java.lang.String

今天把孙MM的<<精通Hibernate>>里第五章的代码跑了一遍,有一个方法怎么也过不去:
  public void deleteAllObjects(String className) throws Exception{
    // Ask for a session using the JDBC information we've configured
    Session session = sessionFactory.openSession();
    Transaction tx = null;
    try {
      tx = session.beginTransaction();
      session.delete("from " +className);
      // We're done; make our changes permanent

查看更多...

Tags: hibernate3

分类:Hibernate | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1694
08-06
02

Hibernate3中通过主键id取得数据对象

关于load()和get()方式的最新认识,在hibernate3中load取出的值只是一个代理对象,那里除了id之外,没有任何值,比如说下面这段代码:
UserStatus status = s1.getStatus(Integer.parseInt(statId));
log.info("测试:"+status.getName());

当使用get()方式时,正常.当使用load()方法时,抛出异常:
引用内容 引用内容
org.hibernate.LazyInitializationException: could not initialize proxy - no Session


深入分析:
在Hibernate中通过主键id取得数据对象有两种方法:
1. get()方法

查看更多...

Tags: hibernate3 load get

分类:Hibernate | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 830
08-06
02

could not initialize proxy - no Session

hibernate2与hibanete3在lazy的默认值上有区别:2中默认为lazy="false".而三中默认为proxy,我们可以把它看作是true.
异常:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:57)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:111)


原因:hibernate3 many-to-one的默认选项是 lazy = "proxy"
解决方法:<many-to-one>  & <set> 中设置 lazy="false"

查看更多...

Tags: hibernate3

分类:Hibernate | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1609
08-06
02

hibernate版本升级问题小节

把程序从hibernate2升级为hibernate3时,遇到的错误.在这里做一小节:
一:INFO [STDOUT] 03:30:37,640 ERROR [DTDEntityResolver] Don't use old DTDs, read the Hibernate 3.x Migration Guide!
程序里原来的映射文件(.hbm.xml)原来以:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
开头。
需要修改为:
<?xml version="1.0" encoding="utf-8"?>

查看更多...

Tags: hibernate3

分类:Hibernate | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 1133