??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品GV天堂无码男同,亚洲av无码一区二区三区四区,亚洲精品mv在线观看http://www.tkk7.com/georgehill/category/1286.html希望能和(zhn)交Java~程的知识和见解zh-cnTue, 27 Feb 2007 08:46:28 GMTTue, 27 Feb 2007 08:46:28 GMT60《深入浅出Hibernate》读书笔?9)——Session理http://www.tkk7.com/georgehill/archive/2005/07/29/8759.htmlFri, 29 Jul 2005 11:43:00 GMThttp://www.tkk7.com/georgehill/archive/2005/07/29/8759.htmlhttp://www.tkk7.com/georgehill/comments/8759.htmlhttp://www.tkk7.com/georgehill/archive/2005/07/29/8759.html#Feedback1http://www.tkk7.com/georgehill/comments/commentRss/8759.htmlhttp://www.tkk7.com/georgehill/services/trackbacks/8759.html      在各USession理Ҏ(gu)中,ThreadLocal模式得到?jin)大量用。ThreadLocal是Java中一U较为特D的U程l定机制。通过ThreadLocal存取的数据,L与当前线E相养I也就是说QJVM为每个运行的U程Q绑定了(jin)U有的本定实例存取空_(d)从而ؓ(f)多线E环境经常出现的q发讉K问题提供?jin)一U隔L制?BR>      下面是Hibernate官方提供的一个ThreadLocal工具Q?BR>

import net.sf.hibernate.
*;
import net.sf.hibernate.cfg.
*;
import org.apache.log4j.Logger;

/**
 * <p>Title: </p>
 *
 * <p>Description: Session的管理类</p>
 *
 * <p>Copyright: Copyright (c) 2005</p>
 *
 * <p>Company: </p>
 *
 * @author George Hill
 * @version 1.0
 
*/


public class HibernateUtil {

  
private static final Logger log = Logger.getLogger(HibernateUtil.class);

  
private static final SessionFactory sessionFactory;

  
/**
   * 初始化Hibernate配置
   
*/

  
static {
    
try {
      
// Create the SessionFactory
      sessionFactory = new Configuration().configure().buildSessionFactory();
    }
 catch (Throwable ex) {
      log.error(
"Initial SessionFactory creation failed.", ex);
      
throw new ExceptionInInitializerError(ex);
    }

  }


  
public static final ThreadLocal session = new ThreadLocal();

  
/**
   * Ҏ(gu)当前U程获取相应的Session
   * @return Session
   * @throws HibernateException
   
*/

  
public static Session currentSession() throws HibernateException {
    Session s 
= (Session) session.get();
    
// Open a new Session, if this Thread has none yet
    if (s == null{
      s 
= sessionFactory.openSession();
      session.
set(s);
    }

    
return s;
  }


  
/**
   * q回Sessionl相应的U程
   * @throws HibernateException
   
*/

  
public static void closeSession() throws HibernateException {
    Session s 
= (Session) session.get();
    session.
set(null);
    
if (s != null)
      s.close();
  }


}


      针对WEBE序Q还可以利用Servlet2.3的Filter机制Q轻村֮现线E生命周期内的Session理。下面是一个通过Filterq行Session理的典型案例:(x)

public class PersistenceFilter implements Filter {
  
protected static ThreadLocal hibernateHolder = new ThreadLocal();

  
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    hibernateHolder.
set(getSession());
    
try {
      
      chain.doFilter(request, response);
      
    }
 finally {
      Session session 
= (Session) hibernateHolder.get();
      
if (session != null{
        hibernateHolder.
set(null);
        
try {
          session.close();
        }
 catch (HibernateException ex) {
          
throw new ServletException(ex);
        }

      }

    }

  }

  
}


2005-07-29 19:43 发表评论
]]>
《深入浅出Hibernate》读书笔?8)——Hibernate分页http://www.tkk7.com/georgehill/archive/2005/07/26/8502.htmlTue, 26 Jul 2005 10:12:00 GMThttp://www.tkk7.com/georgehill/archive/2005/07/26/8502.htmlhttp://www.tkk7.com/georgehill/comments/8502.htmlhttp://www.tkk7.com/georgehill/archive/2005/07/26/8502.html#Feedback3http://www.tkk7.com/georgehill/comments/commentRss/8502.htmlhttp://www.tkk7.com/georgehill/services/trackbacks/8502.html
Criteria criteria = session.createCriteria(TUser.class);
Criteria.add(Expression.eq(
"age""20"));
//从检索结果中获取W?00条记录开始的20条记?/SPAN>
criteria.setFirstResult(100);
criteria.setFetchSize(
20);

      不过Q我在测试的时候L不能够正常工作,把setFetchSizeҎ(gu)换成setMaxResultsҎ(gu)才行。换成最新的mysql-connector-java-3.1.10-bin-g.jar驱动也是一栗?img src ="http://www.tkk7.com/georgehill/aggbug/8502.html" width = "1" height = "1" />

2005-07-26 18:12 发表评论
]]>
《深入浅出Hibernate》读书笔?7)——回调与拦截机制http://www.tkk7.com/georgehill/archive/2005/07/21/8145.htmlThu, 21 Jul 2005 10:35:00 GMThttp://www.tkk7.com/georgehill/archive/2005/07/21/8145.htmlhttp://www.tkk7.com/georgehill/comments/8145.htmlhttp://www.tkk7.com/georgehill/archive/2005/07/21/8145.html#Feedback1http://www.tkk7.com/georgehill/comments/commentRss/8145.htmlhttp://www.tkk7.com/georgehill/services/trackbacks/8145.html      Hibernate通过Lifecycle、Validatable接口制定?jin)实体对象CRUDq程中的回调方式?BR>      Lifecycle接口中的onSave、onUpdate、onDeleteҎ(gu)Q如果返回true则意味着需要中止执行相应的操作q程。如果代码运行期间抛Z(jin)CallbackExceptionQ对应的操作也会(x)被中止。注意,不要试图在这些方法中调用Sessionq行持久化操作,q些Ҏ(gu)中Session无法正常使用?BR>      Validatable.validateҎ(gu)在实体被持久化之前得到调用以对数据q行验证。此Ҏ(gu)在实体对象的生命周期内可能被数次调用Q因此,此方法仅用于数据本n的逻辑校验Q而不要试囑֜此实C务逻辑的验证?BR>

      Hibernateq引入了(jin)InterceptorQؓ(f)持久化事件的捕获和处理提供了(jin)一个非늕性的实现。Interceptor接口定义?jin)Hibernate中的通用拦截机制。Session创徏时即可指定加载相应的InterceptorQ之后,此Session的持久化操作动作都将首先l由此拦截器捕获处理。简单的加蝲范例如下Q?/P>
SessionFactory factory = config.buildSessionFactory();
Interceptor it 
= new MyInterceptor();
session 
= sessionFactory.openSession(it);

      需要注意的是,与Lifecycle相同QInterceptor的方法中不可通过Session实例q行持久化操作?img src ="http://www.tkk7.com/georgehill/aggbug/8145.html" width = "1" height = "1" />

2005-07-21 18:35 发表评论
]]>
《深入浅出Hibernate》读书笔?6)——集合类型和l果集排?/title><link>http://www.tkk7.com/georgehill/archive/2005/07/20/8033.html</link><dc:creator>米</dc:creator><author>米</author><pubDate>Wed, 20 Jul 2005 02:56:00 GMT</pubDate><guid>http://www.tkk7.com/georgehill/archive/2005/07/20/8033.html</guid><wfw:comment>http://www.tkk7.com/georgehill/comments/8033.html</wfw:comment><comments>http://www.tkk7.com/georgehill/archive/2005/07/20/8033.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/georgehill/comments/commentRss/8033.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/georgehill/services/trackbacks/8033.html</trackback:ping><description><![CDATA[<P>      最q真是忙Q事情都挤到一块去?jin)?IMG height=20 src="http://www.tkk7.com/Emoticons/QQ/19.gif" width=20 border=0> l于有时间又看了(jin)几页书?IMG height=20 src="http://www.tkk7.com/Emoticons/QQ/15.gif" width=20 border=0><BR>      a归正传,Hibernate中的Collectioncd分ؓ(f)有序集和无序集两cR这里所谓的有序和无序,是针对Hibernate数据持久q程中,是否保持数据集合中的记录排列序加以区分的。无序集有SetQBagQMap几种Q有序集有List一U。有序集的数据在持久化过E中Q会(x)集合中元素排列的先后顺序同时固化到数据库中Q读取时也会(x)q回一个具备同h列顺序的数据集合?BR>      Hibernate中的Collectioncd是用的自q实现Q所以在E序中,不能够把接口强制转化成相应的JDK Collection的实现?BR> <HR> <BR>      l果集的排序有两U方式:(x)<BR>      1. Sort<BR>         Collection中的数据排序?BR>      2. order-by<BR>         Ҏ(gu)据库执行Select SQLӞ由order by子句实现的数据排序方式?BR><BR>      需要注意的是,order-byҎ(gu)在实现中借助?jin)JDK 1.4中的新增集合cLinkedHashSet以及(qing)LinkedHashMap。因此,order-byҎ(gu)只支持?.4版本以上的JDK中运行?/P><img src ="http://www.tkk7.com/georgehill/aggbug/8033.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/georgehill/" target="_blank">米</a> 2005-07-20 10:56 <a href="http://www.tkk7.com/georgehill/archive/2005/07/20/8033.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《深入浅出Hibernate》读书笔?5)——持久层操作http://www.tkk7.com/georgehill/archive/2005/07/12/7556.htmlTue, 12 Jul 2005 10:49:00 GMThttp://www.tkk7.com/georgehill/archive/2005/07/12/7556.htmlhttp://www.tkk7.com/georgehill/comments/7556.htmlhttp://www.tkk7.com/georgehill/archive/2005/07/12/7556.html#Feedback4http://www.tkk7.com/georgehill/comments/commentRss/7556.htmlhttp://www.tkk7.com/georgehill/services/trackbacks/7556.html      1.如果未能发现W合条g的记录,getҎ(gu)q回nullQ而loadҎ(gu)?x)抛Z个ObejctNotFoundException?BR>      2.LoadҎ(gu)可返回实体的代理cȝ型,而getҎ(gu)永远直接q回实体cR?BR>      3.LoadҎ(gu)可以充分利用内部~存和二U缓存中现有数据Q而getҎ(gu)则仅仅在内部~存中进行数据查找,如没有发现对应数据,越q二U缓存,直接调用SQL完成数据d?



      Session.find/iterate的区别:(x)
      findҎ(gu)执行Select SQL从数据库中获得所有符合条件的记录q构造相应的实体对象Q实体对象构建完毕之后,将其纳入缓存。它对缓存只写不读,因此无法利用~存?BR>      iterateҎ(gu)首先执行一条Select SQL以获得所有符合查询条件的数据idQ随卻IiterateҎ(gu)首先在本地缓存中Ҏ(gu)id查找对应的实体对象是否存在,如果~存中已l存在对应的数据Q则直接以此数据对象作ؓ(f)查询l果Q如果没有找刎ͼ再执行相应的Select语句获得对应的库表记录(iterateҎ(gu)如果执行?jin)数据库d操作q构Z(jin)完整的数据对象,也会(x)其查询l果U_~存Q?



      Query Cache产生作用的情况:(x)
      1.完全相同的Select SQL重复执行?BR>      2.在两ơ查询之_(d)此Select SQL对应的库表没有发生过改变?



      Session.saveҎ(gu)的执行步骤:(x)
      1.在Session内部~存中寻扑־保存对象。内部缓存命中,则认为此数据已经保存Q执行过insert操作Q,实体对象已经处于Persistent状态,直接q回?BR>      2.如果实体cdC(jin)lifecycle接口Q则调用待保存对象的onSaveҎ(gu)?BR>      3.如果实体cdC(jin)validatable接口Q则调用其validate()Ҏ(gu)?BR>      4.调用对应拦截器的Interceptor.onSaveҎ(gu)Q如果有的话Q?BR>      5.构造I(yng)nsert SQLQƈ加以执行?BR>      6.记录插入成功Quser.id属性被讑֮为insert操作q回的新记录id倹{?BR>      7.user对象攑օ内部~存?BR>      8.最后,如果存在U联关系Q对U联关系q行递归处理?



      Session.updateҎ(gu)的执行步骤:(x)
      1.Ҏ(gu)待更新实体对象的KeyQ在当前session的内部缓存中q行查找Q如果发玎ͼ则认为当前实体对象已l处于Persistent状态,q回?BR>      2.初始化实体对象的状态信息(作ؓ(f)之后脏数据检查的依据Q,q将其纳入内部缓存。注意这里Session.updateҎ(gu)本nq没有发送Update SQL完成数据更新操作QUpdate SQL在之后的Session.flushҎ(gu)中执行(Transaction.commit在真正提交数据库事务之前?x)调用Session.flushQ?


      Session.saveOrUpdateҎ(gu)的执行步骤:(x)
      1.首先在Session内部~存中进行查找,如果发现则直接返回?BR>      2.执行实体cd应的Interceptor.isUnsavedҎ(gu)Q如果有的话Q,判断对象是否为未保存状态?BR>      3.Ҏ(gu)unsaved-value判断对象是否处于未保存状态?BR>      4.如果对象未保存(Transient状态)(j)Q则调用saveҎ(gu)保存对象?BR>      5.如果对象为已保存QDetached状态)(j)Q调用updateҎ(gu)对象与Session重新兌?/P>

2005-07-12 18:49 发表评论
]]>
《深入浅出Hibernate》读书笔?4)——事务管?/title><link>http://www.tkk7.com/georgehill/archive/2005/07/08/7374.html</link><dc:creator>米</dc:creator><author>米</author><pubDate>Fri, 08 Jul 2005 08:19:00 GMT</pubDate><guid>http://www.tkk7.com/georgehill/archive/2005/07/08/7374.html</guid><wfw:comment>http://www.tkk7.com/georgehill/comments/7374.html</wfw:comment><comments>http://www.tkk7.com/georgehill/archive/2005/07/08/7374.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/georgehill/comments/commentRss/7374.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/georgehill/services/trackbacks/7374.html</trackback:ping><description><![CDATA[      事务?个基本特性(ACIDQ:(x)<BR>      1. AtomicQ原子性)(j)Q事务中包含的操作被看作一个逻辑单元Q这个逻辑单元中的操作要么全部成功Q要么全部失败?BR>      2. ConsistencyQ一致性)(j)Q只有合法的数据可以被写入数据库Q否则事务应该将其回滚到最初状态?BR>      3. IsolationQ隔L)(j)Q事务允许多个用户对同一个数据的q发讉KQ而不破坏数据的正性和完整性。同Ӟq行事务的修改必M其他q行事务的修改相互独立?BR>      4. DurabilityQ持久性)(j)Q事务结束后Q事务处理的l果必须能够得到固化? <HR> <BR>      数据库操作过E中可能出现?U不定情况Q?BR>      1. 脏读取(Dirty ReadsQ:(x)一个事务读取了(jin)另一个ƈ行事务未提交的数据?BR>      2. 不可重复dQNon-repeatable ReadsQ:(x)一个事务再ơ读取之前的数据Ӟ得到的数据不一_(d)被另一个已提交的事务修攏V?BR>      3. 虚读QPhantom ReadsQ:(x)一个事务重新执行一个查询,q回的记录中包含?jin)因为其他最q提交的事务而生的新记录?BR><BR>      标准SQL规范中,Z(jin)避免上面3U情늚出现Q定义了(jin)4个事务隔ȝU:(x)<BR>      1. Read UncommittedQ最低等U的事务隔离Q仅仅保证了(jin)dq程中不?x)读取到非法数据。上?U不定情况均有可能发生?BR>      2. Read CommittedQ大多数L数据库的默认事务{Q保证了(jin)一个事务不?x)读到另一个ƈ行事务已修改但未提交的数据,避免?jin)“脏d”。该U别适用于大多数pȝ?BR>      3. Repeatable ReadQ保证了(jin)一个事务不?x)修改已l由另一个事务读取但未提交(回滚Q的数据。避免了(jin)“脏d”和“不可重复读取”的情况Q但是带来了(jin)更多的性能损失?BR>      4. SerializableQ最高等U的事务隔离Q上?U不定情况都将被规ѝ这个别将模拟事务的串行执行? <HR> <BR>      Hibernate事务管理委托给底层的JDBC或者JTAQ默认是ZJDBC Transaction的?BR>      Hibernate支持“?zhn)观锁QPessimistic LockingQ”和“乐观锁QOptimistic LockingQ”?BR>      (zhn)观锁对数据被外界修Ҏ(gu)保守态度Q因此,在整个数据处理过E中Q将数据处于锁定状态。?zhn)观锁的实玎ͼ往往依靠数据库提供的锁机制。Hibernate通过使用数据库的for update子句实现?jin)(zhn)观锁机制。Hibernate的加锁模式有Q?BR>      1. LockMode.NONEQ无锁机?BR>      2. LockMode.WRITEQHibernate在Insert和Update记录的时候会(x)自动获取<BR>      3. LockMode.READQHibernate在读取记录的时候会(x)自动获取<BR>      4. LockMode.UPGRADEQ利用数据库的for update子句加锁<BR>      5. LockMode.UPGRADE_NOWAITQOracle的特定实玎ͼ利用Oracle的for update nowait子句实现加锁<BR>      乐观锁大多是Z数据版本QVersionQ记录机制实现。Hibernate在其数据讉K引擎中内|了(jin)乐观锁实玎ͼ可以通过class描述W的optimistic-lock属性结合version描述W指定。optimistic-lock属性有如下可选取|(x)<BR>      1. noneQ无乐观?BR>      2. versionQ通过版本机制实现乐观?BR>      3. dirtyQ通过(g)查发生变动过的属性实C观锁<BR>      4. allQ通过(g)查所有属性实C观锁<img src ="http://www.tkk7.com/georgehill/aggbug/7374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/georgehill/" target="_blank">米</a> 2005-07-08 16:19 <a href="http://www.tkk7.com/georgehill/archive/2005/07/08/7374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《深入浅出Hibernate》读书笔?3)——数据缓?/title><link>http://www.tkk7.com/georgehill/archive/2005/06/22/6557.html</link><dc:creator>米</dc:creator><author>米</author><pubDate>Wed, 22 Jun 2005 10:15:00 GMT</pubDate><guid>http://www.tkk7.com/georgehill/archive/2005/06/22/6557.html</guid><wfw:comment>http://www.tkk7.com/georgehill/comments/6557.html</wfw:comment><comments>http://www.tkk7.com/georgehill/archive/2005/06/22/6557.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/georgehill/comments/commentRss/6557.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/georgehill/services/trackbacks/6557.html</trackback:ping><description><![CDATA[      一般而言QORM的数据缓存应包含如下几个层次Q?BR>      1. 事务U缓存(Transcation Layer CacheQ?BR>      2. 应用U?q程U缓存(Application/Process Layer CacheQ?BR>      3. 分布式缓存(Cluster Layer CacheQ?BR><BR>      Hibernate数据~存QCacheQ分Z个层ơ,以Hibernate语义加以区分Q可分ؓ(f)Q?BR>      1. 内部~存QSession LevelQ也UCؓ(f)一U缓存)(j)<BR>      2. 二~存QSessionFactory LevelQ也UCؓ(f)二~存Q?BR><BR>      Hibernate中,~存在以下情况中发挥作用:(x)<BR>      1. 通过id[主键]加蝲数据?BR>      2. 延迟加蝲<BR><BR>      内部~存正常情况下由Hibernate自动l护Q如果需要手动干预,可以通过以下Ҏ(gu)完成Q?BR>      1. Session.evict<BR>         某个特定对象从内部~存清除?BR>      2. Session.clear<BR>         清空内部~存?BR><BR>      在Hibernate中,二~存늛?jin)应用~存和分布式~存领域。如果数据满以下条Ӟ则可其U_~存理?BR>      1. 数据不会(x)被第三方应用修改Q?BR>      2. 数据大小(Data Size)在可接收的范围之内;<BR>      3. 数据更新频率较低Q?BR>      4. 同一数据可能?x)被pȝ频繁引用Q?BR>      5. 非关键数?关键数据Q如金融帐户数据)?BR>      Hibernate本nq未提供二~存的品化实现Q而是Z多的W三方缓存组件提供了(jin)接入接口Q较常用的第三方lg有:(x)<BR>      1. JCS<BR>      2. EHCache<BR>      3. OSCache<BR>      4. JBossCache<BR>      5. SwarmCache<BR>      Hibernate中启用二U缓存,需要在hibernate.cfg.xml配置hibernate.cache.provider_class参数Q之后,需要在映射文g中指定各个映实?以及(qing)collection)的缓存同步策略。Hibernate提供?jin)一?U内|的~存同步{略Q?BR>      1. read-only<BR>         只读。对于不?x)发生改变的数据Q可使用只读型缓存?BR>      2. nonstrict-read-write<BR>         如果E序对ƈ发访问下的数据同步要求不是非怸|且数据更新操作频率较低,可以采用本选项Q获得较好的性能?BR>      3. read-write<BR>         严格可读写缓存。基于时间戳判定机制Q实C(jin)“read committed”事务隔ȝU。可用于Ҏ(gu)据同步要求严格的情况Q但不支持分布式~存。这也是实际应用中用最多的同步{略?BR>      4. transactional<BR>         事务型缓存,必须q行在JTA事务环境中?img src ="http://www.tkk7.com/georgehill/aggbug/6557.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/georgehill/" target="_blank">米</a> 2005-06-22 18:15 <a href="http://www.tkk7.com/georgehill/archive/2005/06/22/6557.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《深入浅出Hibernate》读书笔?2)——实体对象识?/title><link>http://www.tkk7.com/georgehill/archive/2005/06/22/6546.html</link><dc:creator>米</dc:creator><author>米</author><pubDate>Wed, 22 Jun 2005 08:32:00 GMT</pubDate><guid>http://www.tkk7.com/georgehill/archive/2005/06/22/6546.html</guid><wfw:comment>http://www.tkk7.com/georgehill/comments/6546.html</wfw:comment><comments>http://www.tkk7.com/georgehill/archive/2005/06/22/6546.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/georgehill/comments/commentRss/6546.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/georgehill/services/trackbacks/6546.html</trackback:ping><description><![CDATA[<P>      在Java语言中,对象之间的比较可以通过引用比较(==)和内Ҏ(gu)?equals)两种方式q行Q而在Hibernate的实体对象的比较是通过主键值来比较Q如果要实现自己的识别逻辑Q则需要重写equalsҎ(gu)和hashCodeҎ(gu)?BR><BR>      (g)查数据对象改变检查的一般策略有下面两种Q?BR>      1. 数据对象监控<BR>         数据对象监控的实现方式,通过拦截器对数据对象的设值方法进行拦截。一旦数据对象的讄Ҏ(gu)被调用,则将其标志ؓ(f)“待更新”状态,之后在数据库操作时将其更新到对应的库表?BR>      2. 数据版本Ҏ(gu)<BR>         在持久层框架中维持数据对象的最q读取版本,当数据提交时提交数据与此版本进行比对,如果发生变化则将其同步到数据库对应的库表?BR><BR>      Hibernate采取的是W二U检查策略。它采用一个内部数据结?EntityEntry"保存对应实体cȝ状态信息?BR><BR>      对于U联对象的更斎ͼHibernate根据unsaved-valueq行判定。首先Hibernate?x)取出目标对象的id。之后,此gunsaved-valueq行比对Q如果相{,则认为目标对象尚未保存,否则Q认为对象已l保存,无需再进行保存操作?/P><img src ="http://www.tkk7.com/georgehill/aggbug/6546.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/georgehill/" target="_blank">米</a> 2005-06-22 16:32 <a href="http://www.tkk7.com/georgehill/archive/2005/06/22/6546.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《深入浅出Hibernate》读书笔?1)——实体对象生命周?/title><link>http://www.tkk7.com/georgehill/archive/2005/06/16/6224.html</link><dc:creator>米</dc:creator><author>米</author><pubDate>Thu, 16 Jun 2005 10:31:00 GMT</pubDate><guid>http://www.tkk7.com/georgehill/archive/2005/06/16/6224.html</guid><wfw:comment>http://www.tkk7.com/georgehill/comments/6224.html</wfw:comment><comments>http://www.tkk7.com/georgehill/archive/2005/06/16/6224.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.tkk7.com/georgehill/comments/commentRss/6224.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/georgehill/services/trackbacks/6224.html</trackback:ping><description><![CDATA[      最q正在研诅R深入浅出Hibernate》一书,前面写的随笔有些也是读该书的W记Q只是未做归c,从这开始,我将把相关的内容都整理成一个系列的MW记?BR>      今天q篇是有兛_体对象的生命周期。我刚开始接触Hibernate的时候,只是单的把它当做一个API工具Q直到后来看到有关VO和PO的内Ҏ(gu)Q才意识到Hibernate不仅仅是一个O/R Mapping的API工具Q它q是一个容器。它可以帮你理实体对象的生命周期?BR><BR>      实体对象的生命周期有三种状态:(x)<BR>      1.TransientQ自q态)(j)<BR>      此时的实体对象和数据库中的记录无兌Q只是一个普通的JavaBean?BR>      2.PersistentQ持久状态)(j)<BR>      此时的实体对象和数据库中的记录有兌Q其变更由Hibernate固化到数据库中。该实体对象处于由Hibernate框架所理的状态?BR>      3.DetachedQ游ȝ态)(j)<BR>      处于Persistent状态的对象Q其对应的Session实例关闭之后Q那么,此对象就处于"Detached"状态。Detached状态和Transient状态的区别在于Detached状态的对象可以再次与某个Session实例相关联而成为Persistent对象?BR><BR>      从实体对象是否被U_Hibernate实体理容器的角度,Transient和Detached状态的实体对象可以l称为VOQValue ObjectQ,而被理的实体对象称为POQPersistent ObjectQ。两者的区别Q?BR>      1.VO是相对独立的实体对象Q处于非理状态?BR>      2.PO是HibernateU_其实体管理容器(Entity MapQ的对象Q它代表?jin)与数据库中某条记录对应的Hibernate实体QPO的变化在事务提交时将反映到实际数据库中?BR>      3.如果一个PO与其对应的Session实例分离Q那么此Ӟ它又?x)变成一个VO?BR><BR>      下图是我ȝ实体对象生命周期的状态{换图Q?BR><BR><IMG height=323 alt=vopolife.JPG src="http://www.tkk7.com/images/blogjava_net/georgehill/temp/vopolife.JPG" width=553 border=0><img src ="http://www.tkk7.com/georgehill/aggbug/6224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/georgehill/" target="_blank">米</a> 2005-06-16 18:31 <a href="http://www.tkk7.com/georgehill/archive/2005/06/16/6224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用HQL获取部分的实体对象属?/title><link>http://www.tkk7.com/georgehill/archive/2005/06/15/6167.html</link><dc:creator>米</dc:creator><author>米</author><pubDate>Wed, 15 Jun 2005 08:33:00 GMT</pubDate><guid>http://www.tkk7.com/georgehill/archive/2005/06/15/6167.html</guid><wfw:comment>http://www.tkk7.com/georgehill/comments/6167.html</wfw:comment><comments>http://www.tkk7.com/georgehill/archive/2005/06/15/6167.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/georgehill/comments/commentRss/6167.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/georgehill/services/trackbacks/6167.html</trackback:ping><description><![CDATA[      在用HQL查询中,有时q不需要获取完整的一个实体对象,例如一个实体对象User有三个属性:(x)account, password和emailQ如果我们只需要获取account和email属性,那么有两U方法可以选择?BR>      1. 用普通的"select user.account, user.email from User as user"Q程序片断如下:(x)<BR><BR> <DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"> <DIV><IMG src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">    List list </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> session.createQuery(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">select user.account, user.email from User as user</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">).list();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align=top>    Iterator it </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> list.iterator();<BR><IMG id=Codehighlighter1_157_264_Open_Image onclick="this.style.display='none'; Codehighlighter1_157_264_Open_Text.style.display='none'; Codehighlighter1_157_264_Closed_Image.style.display='inline'; Codehighlighter1_157_264_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_157_264_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_157_264_Closed_Text.style.display='none'; Codehighlighter1_157_264_Open_Image.style.display='inline'; Codehighlighter1_157_264_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000"> (it.hasNext()) </SPAN><SPAN id=Codehighlighter1_157_264_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_157_264_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>      Object[] values </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> (Object[]) it.next();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>      System.</SPAN><SPAN style="COLOR: #0000ff">out</SPAN><SPAN style="COLOR: #000000">.println(values[</SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">] </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> values[</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">]);<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>    }</SPAN></SPAN></DIV></DIV><BR>      q时调用QuerycȝlistҎ(gu)q回的将是一个每个元素都是一个Object数组的List。如果只获取一个属性,那么q回的List中的每个元素都是String实例?BR><BR>      2.在HQL中用new操作W生成实体对象,例如Q?select new User(user.account, user.email) from User as user"Q程序片断如下:(x)<BR><BR> <DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"> <DIV><IMG src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #000000">    List list </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> session.createQuery(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">select new User(user.account, user.email) from User as user</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">).list();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/None.gif" align=top>    Iterator it </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> list.iterator();<BR><IMG id=Codehighlighter1_167_278_Open_Image onclick="this.style.display='none'; Codehighlighter1_167_278_Open_Text.style.display='none'; Codehighlighter1_167_278_Closed_Image.style.display='inline'; Codehighlighter1_167_278_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_167_278_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_167_278_Closed_Text.style.display='none'; Codehighlighter1_167_278_Open_Image.style.display='inline'; Codehighlighter1_167_278_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">while</SPAN><SPAN style="COLOR: #000000"> (it.hasNext()) </SPAN><SPAN id=Codehighlighter1_167_278_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_167_278_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>      User user </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> (User) it.next();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>      System.</SPAN><SPAN style="COLOR: #0000ff">out</SPAN><SPAN style="COLOR: #000000">.println(user.getAccount() </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> user.getEmail());<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>    }</SPAN></SPAN></DIV></DIV><BR>      q时listҎ(gu)q回的List中的每一个元素都是User实体对象。这里有三点需要注意的Q?BR>      a.在HQL语句中需要用as操作W指定User的别名,q且需要在构造函数的属性前面加上别名;<BR>      b.HQL语句中的构造函数在UsercM必须要有相应的构造函敎ͼ<BR>      c.生成的实体对象是VO对象Q如果对q些对象调用Session的saveOrUpdateҎ(gu)导致插入新的记录,而不是更新记录?img src ="http://www.tkk7.com/georgehill/aggbug/6167.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/georgehill/" target="_blank">米</a> 2005-06-15 16:33 <a href="http://www.tkk7.com/georgehill/archive/2005/06/15/6167.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Criteria的示例查?/title><link>http://www.tkk7.com/georgehill/archive/2005/06/03/5533.html</link><dc:creator>米</dc:creator><author>米</author><pubDate>Fri, 03 Jun 2005 09:27:00 GMT</pubDate><guid>http://www.tkk7.com/georgehill/archive/2005/06/03/5533.html</guid><wfw:comment>http://www.tkk7.com/georgehill/comments/5533.html</wfw:comment><comments>http://www.tkk7.com/georgehill/archive/2005/06/03/5533.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/georgehill/comments/commentRss/5533.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/georgehill/services/trackbacks/5533.html</trackback:ping><description><![CDATA[      Criteria Query是很好的一U面向对象的查询实现Q它提供?jin)一U示例查询的方式。该方式Ҏ(gu)已有的对象,查找数据库中属性匹配的其他对象?BR>      下面是一个场景片断,模糊查找数据库中用户帐号?test'Q邮件地址?A href="mailto:'georgehill@21cn.com'">'georgehill@21cn.com'</A>的实例,忽略大小写?BR><BR> <DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"> <DIV><IMG id=Codehighlighter1_58_481_Open_Image onclick="this.style.display='none'; Codehighlighter1_58_481_Open_Text.style.display='none'; Codehighlighter1_58_481_Closed_Image.style.display='inline'; Codehighlighter1_58_481_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockStart.gif" align=top><IMG id=Codehighlighter1_58_481_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_58_481_Closed_Text.style.display='none'; Codehighlighter1_58_481_Open_Image.style.display='inline'; Codehighlighter1_58_481_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedBlock.gif" align=top><SPAN style="COLOR: #000000">  </SPAN><SPAN style="COLOR: #0000ff">public</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> testCriteriaExampleQuery() throws Exception </SPAN><SPAN id=Codehighlighter1_58_481_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_58_481_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    User user </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> User();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    user.setAccount(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">test</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    user.setEmail(</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">georgehill@21cn.com</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    Criteria criteria </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> session.createCriteria(User.</SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000">).add(Example.create(user).enableLike(MatchMode.ANYWHERE).ignoreCase());<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    List list </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> criteria.list();<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>    <BR><IMG id=Codehighlighter1_354_477_Open_Image onclick="this.style.display='none'; Codehighlighter1_354_477_Open_Text.style.display='none'; Codehighlighter1_354_477_Closed_Image.style.display='inline'; Codehighlighter1_354_477_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_354_477_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_354_477_Closed_Text.style.display='none'; Codehighlighter1_354_477_Open_Image.style.display='inline'; Codehighlighter1_354_477_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>    </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000"> (list </SPAN><SPAN style="COLOR: #000000">!=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">null</SPAN><SPAN style="COLOR: #000000">) </SPAN><SPAN id=Codehighlighter1_354_477_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_354_477_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG id=Codehighlighter1_400_471_Open_Image onclick="this.style.display='none'; Codehighlighter1_400_471_Open_Text.style.display='none'; Codehighlighter1_400_471_Closed_Image.style.display='inline'; Codehighlighter1_400_471_Closed_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><IMG id=Codehighlighter1_400_471_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_400_471_Closed_Text.style.display='none'; Codehighlighter1_400_471_Open_Image.style.display='inline'; Codehighlighter1_400_471_Open_Text.style.display='inline';" src="http://www.tkk7.com/images/OutliningIndicators/ContractedSubBlock.gif" align=top>      </SPAN><SPAN style="COLOR: #0000ff">for</SPAN><SPAN style="COLOR: #000000"> (</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> i </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">0</SPAN><SPAN style="COLOR: #000000">; i </SPAN><SPAN style="COLOR: #000000"><</SPAN><SPAN style="COLOR: #000000"> list.size(); i</SPAN><SPAN style="COLOR: #000000">++</SPAN><SPAN style="COLOR: #000000">) </SPAN><SPAN id=Codehighlighter1_400_471_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><IMG src="http://www.tkk7.com/images/dot.gif"></SPAN><SPAN id=Codehighlighter1_400_471_Open_Text><SPAN style="COLOR: #000000">{<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/InBlock.gif" align=top>        System.</SPAN><SPAN style="COLOR: #0000ff">out</SPAN><SPAN style="COLOR: #000000">.println(((User) list.</SPAN><SPAN style="COLOR: #0000ff">get</SPAN><SPAN style="COLOR: #000000">(i)).getAccount());<BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>      }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>    }</SPAN></SPAN><SPAN style="COLOR: #000000"><BR><IMG src="http://www.tkk7.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>  }</SPAN></SPAN></DIV></DIV><BR>      CZ查询需要生成Example实例Q可以通过Example的静(rn)态方法create生成。ExamplecL下面的几个方法指定查询的方式Q? <H3>excludeZeroes</H3><PRE>public <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/Example.html">Example</A> <B>excludeZeroes</B>()</PRE> <DL> <DD>Exclude zero-valued properties <P></P> <DD> <DL></DL></DD></DL> <HR> <H3>excludeNone</H3><PRE>public <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/Example.html">Example</A> <B>excludeNone</B>()</PRE> <DL> <DD>Don't exclude null or zero-valued properties <P></P> <DD> <DL></DL></DD></DL> <HR> <H3>enableLike</H3><PRE>public <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/Example.html">Example</A> <B>enableLike</B>(<A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/MatchMode.html">MatchMode</A> matchMode)</PRE> <DL> <DD>Use the "like" operator for all string-valued properties <P></P> <DD> <DL></DL></DD></DL> <HR> <H3>enableLike</H3><PRE>public <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/Example.html">Example</A> <B>enableLike</B>()</PRE> <DL> <DD>Use the "like" operator for all string-valued properties <P></P> <DD> <DL></DL></DD></DL> <HR> <H3>ignoreCase</H3><PRE>public <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/Example.html">Example</A> <B>ignoreCase</B>()</PRE> <DL> <DD>Ignore case for all string-valued properties <P></P> <DD> <DL></DL></DD></DL> <HR> <H3>excludeProperty</H3><PRE>public <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/Example.html">Example</A> <B>excludeProperty</B>(<A title="class or interface in java.lang" >String</A> name)</PRE> <DL> <DD>Exclude a particular named property <P></P> <DD> <DL></DL></DD></DL> <HR> <BR>      当用enableLike()Ҏ(gu)Ӟ可以通过MatchMode指定匚w的方式。MatchMode提供?jin)四U匹配的方式Q?BR><BR> <TABLE cellSpacing=0 cellPadding=3 width="100%" summary="" border=1> <TBODY> <TR class=TableHeadingColor bgColor=#ccccff> <TD colSpan=2><FONT size=+2><B>Field Summary</B></FONT></TD></TR> <TR class=TableRowColor bgColor=white> <TD vAlign=top align=right width="1%"><FONT size=-1><CODE>static <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/MatchMode.html">MatchMode</A></CODE></FONT></TD> <TD><CODE><B><A href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/MatchMode.html#ANYWHERE">ANYWHERE</A></B></CODE> <BR>          Match the pattern anywhere in the string</TD></TR> <TR class=TableRowColor bgColor=white> <TD vAlign=top align=right width="1%"><FONT size=-1><CODE>static <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/MatchMode.html">MatchMode</A></CODE></FONT></TD> <TD><CODE><B><A href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/MatchMode.html#END">END</A></B></CODE> <BR>          Match the end of the string to the pattern</TD></TR> <TR class=TableRowColor bgColor=white> <TD vAlign=top align=right width="1%"><FONT size=-1><CODE>static <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/MatchMode.html">MatchMode</A></CODE></FONT></TD> <TD><CODE><B><A href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/MatchMode.html#EXACT">EXACT</A></B></CODE> <BR>          Match the entire string to the pattern</TD></TR> <TR class=TableRowColor bgColor=white> <TD vAlign=top align=right width="1%"><FONT size=-1><CODE>static <A title="class in net.sf.hibernate.expression" href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/MatchMode.html">MatchMode</A></CODE></FONT></TD> <TD><CODE><B><A href="file:///D:/lib/hibernate-2.1/doc/api/net/sf/hibernate/expression/MatchMode.html#START">START</A></B></CODE> <BR>          Match the start of the string to the pattern</TD></TR></TBODY></TABLE><img src ="http://www.tkk7.com/georgehill/aggbug/5533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/georgehill/" target="_blank">米</a> 2005-06-03 17:27 <a href="http://www.tkk7.com/georgehill/archive/2005/06/03/5533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何用XDoclet生成hbm.xml文ghttp://www.tkk7.com/georgehill/archive/2005/05/17/4402.htmlTue, 17 May 2005 02:20:00 GMThttp://www.tkk7.com/georgehill/archive/2005/05/17/4402.htmlhttp://www.tkk7.com/georgehill/comments/4402.htmlhttp://www.tkk7.com/georgehill/archive/2005/05/17/4402.html#Feedback0http://www.tkk7.com/georgehill/comments/commentRss/4402.htmlhttp://www.tkk7.com/georgehill/services/trackbacks/4402.html阅读全文

2005-05-17 10:20 发表评论
]]>
Hibernate的一对多兌实例http://www.tkk7.com/georgehill/archive/2005/05/15/4296.htmlSat, 14 May 2005 17:55:00 GMThttp://www.tkk7.com/georgehill/archive/2005/05/15/4296.htmlhttp://www.tkk7.com/georgehill/comments/4296.htmlhttp://www.tkk7.com/georgehill/archive/2005/05/15/4296.html#Feedback1http://www.tkk7.com/georgehill/comments/commentRss/4296.htmlhttp://www.tkk7.com/georgehill/services/trackbacks/4296.html阅读全文

2005-05-15 01:55 发表评论
]]>
Hibernate的一对一兌实例http://www.tkk7.com/georgehill/archive/2005/05/14/4290.htmlSat, 14 May 2005 07:02:00 GMThttp://www.tkk7.com/georgehill/archive/2005/05/14/4290.htmlhttp://www.tkk7.com/georgehill/comments/4290.htmlhttp://www.tkk7.com/georgehill/archive/2005/05/14/4290.html#Feedback0http://www.tkk7.com/georgehill/comments/commentRss/4290.htmlhttp://www.tkk7.com/georgehill/services/trackbacks/4290.html阅读全文

2005-05-14 15:02 发表评论
]]>
我的Hibernate启蒙文http://www.tkk7.com/georgehill/archive/2005/05/12/4236.htmlThu, 12 May 2005 09:45:00 GMThttp://www.tkk7.com/georgehill/archive/2005/05/12/4236.htmlhttp://www.tkk7.com/georgehill/comments/4236.htmlhttp://www.tkk7.com/georgehill/archive/2005/05/12/4236.html#Feedback0http://www.tkk7.com/georgehill/comments/commentRss/4236.htmlhttp://www.tkk7.com/georgehill/services/trackbacks/4236.htmlhttp://www.xiaxin.net/Hibernate_DEV_GUIDE.rar

2005-05-12 17:45 发表评论
]]>
վ֩ģ壺 ŷƷһ| Դ߹ۿѸ| ձxxwwxxwwƵ| þþƷAV㽶| þ91ۿ| þþƷž޾Ʒ | ɫwwwվ| ŮëƬ߿˶| ޹һվƷѿ| ϼ˳߹ۿƵ| ۺɫ߹ۿ| ƷžžþƵ| ۺר| ԴԴѹۿ| av뾫Ʒ| þùƷһ| ղ2021| պһ| ʪһҹƷѸ| ޾ƷձƷ| ҹѸþӰԺ| ĻۺϾþ2| 2021պƵ| ޹˾Ʒ| ߲| þþþþþþþþѾƷ| AVպƷþþþþþ| ѹۿ㶮| ˳ɫ77777߹ۿ| AV˳ۺ| ɫˬƵ| AV| avר| ڵƵ߹ۿ| vavava888www| Ƭѿ| һëƬԿ60Ѳ| 91˾Ʒϵȫ| պ߸| ѹƵ| ޳a޳wwwţţ|