ÔÚÏîÄ¿ÊÕβ½×¶Î£¬¿Í»§Í»È»Ìá³öÒ»¸öºÜÂé·³µ«Ò²ºÜÕý³£µÄÐèÇó£¬ÏµÍ³ÄÚµÄÒ»Çи͝¶¼Òª½øÐмǼ¡£¸ñʽÈç: 2004.1.1 12:30 ÓôÒ²·ç ÏúÊÛ¶©µ¥ ¶©»õÈÕÆÚ 2004.1.2->2004.1.3 µÚһʱ¼äÎÒ¾ÍÏëµ½ÁËÒ²ºÜAOPµÄTrigger£¬µ«Trigger±Ï¾¹ºÍJava´úÂëÊÇÁ½¸öÊÀ½ç£¬Ôõô°Ñ²Ù×÷Ô±Ãû×Ö´«½øÈ¥¾ÍÓеãÂé·³(ÒªËùÓбíÔÙ¼ÓÒ»¸ölast modifierµÄÁУ¬È»ºóÐ޸ijÌÐò)£¬Í¬Ê±TriggerÒ»¸öºÜ²»¹»AOPµÄµØ·½¾ÍÊÇÓжàÉÙ¸ö±í¾ÍҪд¶àÉÙ¸öTrigger£¬ÓжàÉÙ¸öÁоÍҪд¶àÉÙÁС£
HibernateµÄCommunity Area ¸ÕºÃÓÐһƪHistory InterceptorµÄÎÄÕ£¬ºÜAOPµÄ½â¾öÁËÕâ¸öÎÊÌâ¡£ËäÈ»ÓÃVelocityÉú³ÉTrigger¿ÉÄܸü¼Ó¼¯Öпì½Ý£¬µ«¼¼ÊõµÄ¿ñÈÈÇýʹÎÒÈ¥³¢ÊÔÁË·½·¨2¡£
1.Hibernate Inteceptor ¸ÅÄî Inteceptor--À¹½ØÆ÷µÄ¸ÅÄîÔ´×ÔAOP,ÔÚ2.1.6ÖÐÎİæµÄ²Î¿¼ÊÖ²áÀïÃæÕâÑùд Interceptor½Ó¿ÚÌṩ´Ósessionµ½ÄãµÄÓ¦ÓóÌÐòµÄ»Øµ÷·½·¨£¬ÈÃÄãµÄ³ÌÐò¿ÉÒÔÔڳ־û¯¶ÔÏó±£´æ/¸ü¸Ä/ɾ³ý»òÕß×°ÔØµÄʱºò²Ù×÷ËüµÄÊôÐÔ¡£µäÐÍ´úÂ룺 public class AuditInterceptor implements Interceptor, Serializable { public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) {
if ( entity instanceof Auditable ) { for ( int i=0; i < propertyNames.length; i++ ) { if ( "lastUpdateTimestamp".equals( propertyNames[i] ) ) { currentState[i] = new Date(); return true; } } } return false; } }
µ±session±»´´½¨µÄʱºò£¬Ö¸¶¨À¹½ØÆ÷¡£
Session session = sf.openSession( new AuditInterceptor() );
¿É¼û,InterceptorµÄ»ù±¾Ä£Ê½ÊÇ 1.ÌṩonLoad(),onSave(),onDelete,onFlushDirty()¼¸¸ö»Øµ÷º¯Êý¡£ ÔÚ´´½¨sessionʱÏòsessionÖ¸¶¨Interceptor.
2.ÿ¸ö»Øµ÷º¯ÊýµÄ²ÎÊýÈçÏÂ,ÒѾ×ã¹»×÷ÈκÎÊÂÇé 1.Object entity ¶ÔÏó 2.Serializable id ¶ÔÏóµÄid 3.String[] propertyNames ÊôÐÔµÄÃû³ÆÊý×é 4.Type[] types ÊôÐÔµÄÀàÐÍÊý×é 5.Object[] previousState ¸üÐÂǰµÄÊôÐÔÖµ 6.Object[] currentState ¸üкóµÄÊôÐÔÖµ
3.ÔÚº¯ÊýÄÚ,ͨ¹ýif ( entity instanceof Auditable )ÅжÏÊÇ·ñÄ¿±ê¶ÔÏóÀàÐÍ.
2.History Interceptorģʽ 1.ËùÓÐÐèÒª¼Ç¼¸ü¸ÄÀúÊ·µÄVO implement Historizable½Ó¿Ú¡£ History Interceptor¸ù¾Ý if ( entity instanceof Historizable)lÀ´ÅжÏÊÇ·ñÐèÒª¸É»î¡£
2.ËùÓÐVOº¬ÓÐsetLastModifyer()º¯Êý¡£ÔÚ³ÌÐòÖаѲÙ×÷Ô±Ãû×Ö´«Èë¡£
3.´´½¨HistoryEntryµÄPOJOºÍhbm °üº¬ÈçϵÄÁÐ id,who,what,property,oldValue,newValue
4.´´½¨Ò»¸öHistory±í£¬¿¿history_typeÁÐÓü̳ÐÓ³ÉäΪ²»Í¬µÄ×ÓÀà,ÈçGoodsHistory,CustomerHistory¡£
5.ΪËùÓÐÐèÒª¼Í¼¸ü¸ÄÀúÊ·µÄ¶ÔÏóÔÚPOJOºÍhbmÖмÓÈëhistoryEntry Set¡£
6.ÁôÒâÊôÐÔ³ýString,BigDecimalµÈ»ù±¾ÀàÐÍÍâ,ÆäËûÄÚǶ¶ÔÏóÒª±£Ö¤ÓÐEqualsº¯ÊýºÍtoString()º¯Êý. ÓÃhbm2javaÉú³ÉµÄjava code, toString()º¯ÊýÊä³öµÄÊÇID,ÐèÒª¸ÄΪÓÐÒâÒåµÄID+name, ¿ÉÒÔÔÚhbmÀï°ÑnameÊôÐÔµÄ<meta>ÉèΪ<meta-attribute name="is-tostring-value" value="true">
3.ʣϵÄÎÊÌâ 1.µ¥²ãµÄ¶ÔÏóÒѾ»ñµÃÍêÃÀµÄ½â¾ö,µ«¶ÔÓÚ¶©µ¥µÄ×Ó¶ÔÏóÓÖÈçºÎ½â¾öÄØ?
2.ÈçºÎ¸ßЧÀûÓÃi18°Ñ±»¸ü¸ÄµÄ±íÃûºÍÁÐÃû·Òë³ÉÖÐÎÄ¡£
3.SpringËä¿ÉÔÚ<Session Factory>»òÕß<trancetion manager>½Úµã¶¨Òå<Entity Interceptor>,µ«ÔÚonflushDirty()º¯ÊýÖÐÀÏÊÇÄò»µ½previousState,ËäȻͬÊÂÕÒµ½·½·¨ÔÝʱ½â¾öÁË,µ«×ÜÊDz»Õý¹æ.
ÆäÖÐÎÊÌâ1ÊÇTrigger¸ü¼ÓÎÞ·¨Íê³ÉµÄ¡£ 
|