¤³¤Î¥Ú¡¼¥¸¤òdel.icio.us¤ËÄɲà ¤³¤Î¥Ú¡¼¥¸¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲ䳤Υڡ¼¥¸¤ò´Þ¤à¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯ ¤³¤Î¥Ú¡¼¥¸¤òlivedoor ¥¯¥ê¥Ã¥×¤ËÄɲà ¤³¤Î¥Ú¡¼¥¸¤òYahoo!¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲ䳤Υڡ¼¥¸¤ò´Þ¤àYahoo!¥Ö¥Ã¥¯¥Þ¡¼¥¯
Top / Hibernate / Spring¤ò»È¤Ã¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó½èÍý¤òµ­½Ò¤¹¤ë

Hibernate¤È¥È¥é¥ó¥¶¥¯¥·¥ç¥ó´ÉÍý¤Ë´Ø¤¹¤ë²ÝÂê

Hibernate¥Ù¡¼¥¹¤ÎDAO¤òºî¤Ã¤¿¾ì¹ç¤Ë¡¢¥È¥é¥ó¥¶¥¯¥·¥ç¥ó½èÍý¤ò¤É¤Î¤è¤¦¤Ëµ­½Ò¤¹¤ë¤«¤¬ÌäÂê¤Ë¤Ê¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£

¤¿¤È¤¨¤Ð²¼µ­¤Î¤è¤¦¤ÊÆó¤Ä¤Î¥Æ¡¼¥Ö¥ë

schema.png

¤ËÂФ·¤Æ¤½¤ì¤¾¤ìMemberDAO¤ÈWorkGroupDAO¤òºî¤ë¤È»×¤¤¤Þ¤¹¡£¤µ¤é¤Ë¤½¤ÎDAO¤ò»ÈÍѤ¹¤ë¥Ó¥¸¥Í¥¹¥á¥½¥Ã¥É¡¢¤¿¤È¤¨¤Ð

bl.png

¤Ê¤ó¤Æ¤Î¤¬ÄêµÁ¤µ¤ì¤ë¤È»×¤¤¤Þ¤¹¡£

¤³¤Î¤È¤­¡¢¤¢¤ë½èÍý¤Î¾ì¹ç¤Ï¥á¥½¥Ã¥Éñ°Ì¤Ç¥È¥é¥ó¥¶¥¯¥·¥ç¥ó´ÉÍý¤·¡¢¤Û¤«¤Î½èÍý¤Î¾ì¹ç¤ÏÊ£¿ô¤Î¥á¥½¥Ã¥É¤Ë¤Þ¤¿¤¬¤Ã¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó´ÉÍý¤·¤¿¤¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£¾å¤ÎÎã¤À¤È¡¢

  • addMember¤ÏMember¤òÅÐÏ¿¤¹¤ë
  • addGroup¤ÏWorkGroup?¤òÅÐÏ¿¤¹¤ë
  • add¤ÏMember¤òGroup¤ËÄɲ乤롣°ú¿ô¤Î¥á¥ó¥Ð¡¼¤¬¤¤¤Ê¤«¤Ã¤¿¤éaddMember¤ÇMember¤òÅÐÏ¿¤¹¤ë¡£°ú¿ô¤Î¥°¥ë¡¼¥×¤Ê¤«¤Ã¤¿¤é¡¢Îã³°¤òThrow¤¹¤ë

¤È¤·¤¿¾ì¹ç¡¢

  • ¥á¥ó¥Ð¡¼¤òÅÐÏ¿¤·¤è¤¦¤È¤·¤ÆaddMember¤ò¸Æ¤Ó½Ð¤·¤¿¾ì¹ç¤Ï¡¢addMemberÆâ¤Ç¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬³«»Ï¤µ¤ì¡¢½ªÎ»¤¹¤ì¤Ð¤¤¤¤¡£
  • addÆâ¤Ç¥µ¥Ö¥ë¡¼¥Á¥ó(<-¸Å¤Ã)¤È¤·¤ÆaddMember¤¬¸Æ¤Ð¤ì¤ë¾ì¹ç¤Ï¡¢add¤Ç¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬³«»Ï¤µ¤ì¡¢½ªÎ»¤µ¤ì¤ë¤Î¤ÇaddMember¤Ï¤¹¤Ç¤Ë¤¢¤ë¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Ë»²²Ã¤¹¤ì¤Ð¤è¤¤

¤È¤Ê¤ê¤Þ¤¹¡£°ì¤Ä¤á¤ÎÎã¤À¤ÈaddMemberÆâ¤Ç¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Î³«»Ï¡¦½ªÎ»¤Î½èÍý¤ò½ñ¤±¤Ð¤è¤¤¤Ç¤¹¤¬¡¢Æó¤Ä¤á¤ÎÎã¤ò¹Í¤¨¤ë¤ÈaddMemberÆâ¤Ç¥È¥é¥ó¥¶¥¯¥·¥ç¥ó³«»Ï¤È½ªÎ»¤Î½èÍý¤ò¤·¤Á¤ã¤¦¤È¤Þ¤º¤¤¤ï¤±¤Ç¤¹¤Í¡£¤Ä¤Þ¤ê¤¢¤ë¥á¥½¥Ã¥É¤ËÂФ·¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Î¥¹¥³¡¼¥×(¶­³¦¡©)¤¬¾ìÌ̤ˤè¤Ã¤Æ°Û¤Ê¤ë¤³¤È¤¬¤¢¤ë¤Î¤Ç¤¹¤¬¡¢Spring¤Ç¤Ï¤³¤ÎÊÕ¤ò¥È¥é¥ó¥¶¥¯¥·¥ç¥ó½èÍý¤òÀë¸ÀŪ¤Ëµ­½Ò¤¹¤ë¤³¤È¤Ç²ò·è¤·¤Æ¤¤¤Þ¤¹¡£

¼ÂºÝ¤Ë¤ä¤Ã¤Æ¤ß¤ë

¤³¤ÎÊÕ¤ò¹Í¤¨¤ë¤¿¤á¤Ë¶ñÂÎÎã¤Ç¹Ô¤­¤Þ¤¹¡£º£²ó¹Í¤¨¤ë¥¯¥é¥¹·²¤ÎÁ´ÂÎÁü¤Ï°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£Îã¤òñ½ã¤Ë¤¹¤ë¤¿¤á¤Ë¡¢°ì¤Ä¤Î¥Æ¡¼¥Ö¥ë¤ËÂФ¹¤ë¥È¥é¥ó¥¶¥¯¥·¥ç¥ó´ÉÍý¤ò¹Í¤¨¤Þ¤¹¡£

UserBL->UserDao->¥Ç¡¼¥¿¥Ù¡¼¥¹

¤È¤¤¤¦¹½À®¤Ë¤Ê¤Ã¤Æ¤¤¤Æ¡¢UserBL¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó»ØÄê¤ò¤É¤¦¤ä¤ë¤«¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¤Í¡£

before.png

Âбþ¤¹¤ë¥Æ¡¼¥Ö¥ë¤Ï°Ê²¼¤ÎÄ̤êºîÀ®¤·¤Þ¤·¤¿¡£

create table MKINO.USER_ATTR (
 USERID varchar2(100) not null,
 NAME varchar2(1000), primary key (USERID)
);

³Îǧ¤·¤Æ¤ß¤Þ¤¹¡£

-bash-3.00$ sqlplus mkino/xxxx
SQL*Plus: Release 10.2.0.1.0 - Production on ÌÚ 5·î 3 21:51:40 2007
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
¤ËÀܳ¤µ¤ì¤Þ¤·¤¿¡£
SQL> desc user_attr;
 ̾Á°                                      NULL?    ·¿
 ----------------------------------------- -------- ----------------------------
 USERID                                    NOT NULL VARCHAR2(100)
 NAME                                               VARCHAR2(1000)

SQL>

OK¤Ç¤¹¡£¤Á¤Ê¤ß¤Ë¤³¤ÎÊդΥ桼¥¶¤Ï°Ê²¼¤Î¤è¤¦¤Ëºî¤Ã¤Æ¤Þ¤¹¡£¤¢¥×¥í¥À¥¯¥È¤ÏOracle 10g XE¤Ç¤¹¡£

-bash-3.00$ . /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh
-bash-3.00$ sqlplus / as sysdba
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
¤ËÀܳ¤µ¤ì¤Þ¤·¤¿¡£
SQL> CREATE USER "MKINO"  PROFILE "DEFAULT"
     IDENTIFIED BY "xxxx" DEFAULT TABLESPACE "USERS"
     TEMPORARY TABLESPACE "TEMP"
     QUOTA UNLIMITED
     ON "USERS"
     ACCOUNT UNLOCK;  2    3    4    5    6

¥æ¡¼¥¶¡¼¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿¡£
SQL> create role MKINO_ROLE;

¥í¡¼¥ë¤¬ºîÀ®¤µ¤ì¤Þ¤·¤¿¡£
SQL>  GRANT
 CREATE SESSION,
 CREATE ANY INDEX,
 CREATE ANY VIEW,
 CREATE ANY SYNONYM,
 CREATE ANY SEQUENCE,
 CREATE ANY TABLE,
 SELECT ANY TABLE,
 INSERT ANY TABLE,
 UPDATE ANY TABLE,
 DELETE ANY TABLE
 TO MKINO_ROLE;  2    3    4    5    6    7    8    9   10   11   12

¸¢¸ÂÉÕÍ¿¤¬À®¸ù¤·¤Þ¤·¤¿¡£
SQL>
GRANT MKINO_ROLE TO MKINO;
 SQL>
¸¢¸ÂÉÕÍ¿¤¬À®¸ù¤·¤Þ¤·¤¿¡£
SQL>
SQL> quit
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production¤È¤ÎÀܳ¤¬ÀÚÃǤµ¤ì¤Þ¤·¤¿¡£
-bash-3.00$

Spring¤ò»È¤Ã¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó½èÍý¤òµ­½Ò¤¹¤ë

¤µ¤Æ¡¢Spring¤Ç¤ÏBL¤Î¥Ó¥¸¥Í¥¹¥á¥½¥Ã¥É¤ËÂФ·¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó½èÍý¤òÀë¸ÀŪ¤ËÄɲ乤뤳¤È¤¬¤Ç¤­¤ë¤È¤¤¤¤¤Þ¤·¤¿¤¬¡¢°Ê²¼¤Î¤è¤¦¤Ë¤ä¤ê¤Þ¤¹¡£

¤Þ¤º¡¢¤â¤È¤ÎBL¤Î̾Á°¤òuserBL¤«¤éuserBLTarget¤ËÊѹ¹¤·¡¢userBL¤È¤¤¤¦Ì¾Á°¤ÎBeanÀßÄê¤ò¿·µ¬¤ËºîÀ®¤·¤Þ¤¹¡£¤½¤Î¿·¤¿¤ÊJavaBeans?¤Î·¿¤ÏSpring¤¬Ä󶡤·¤Æ¤¯¤ì¤ëProxy¥¯¥é¥¹¤Ç¡¢³°Éô¤«¤é¸«¤¿¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤Ï¸µ¤ÎuserBL¤ÈƱ¤¸¤Ë¤Ê¤ê¤Þ¤¹¡£¤Ä¤Þ¤ê¸«¤¿Ìܤϳ°Éô¤«¤é¸«¤¿¤éÁ´¤¯ÊѤï¤Ã¤Æ¤¤¤Ê¤¤¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

¤½¤ÎProxy¤Î¥¿¥°ÉÕ¤±¤Ç¤¹¤¬¡¢¥È¥é¥ó¥¶¥¯¥·¥ç¥óÀßÄê¤ä¡¢¥¿¡¼¥²¥Ã¥È¤Ë¤Ê¤ëJavaBeans?(¸µ¤ÎuserBL¤Î¤³¤È)¤Î»ØÄê¤Ê¤É¤òµ­½Ò¤·¤Æ¤ª¤­¤Þ¤¹¡£

¤µ¤Æ½èÍý¤Îή¤ì¤Ç¤¹¤¬¡¢¼ÂºÝBL¤ò»È¤¦¥×¥í¥°¥é¥à¤ÏuserBL¤È¤¤¤¦¥­¡¼¤ÇSpring¤«¤éJavaBeans?¤ò¼èÆÀ¤¹¤ë¤Î¤Ç¡¢½èÍý¥·¡¼¥±¥ó¥¹¤Ï

BL¤ò»È¤¦¥×¥í¥°¥é¥à -> userBL

¤À¤Ã¤¿¤Î¤¬

BL¤ò»È¤¦¥×¥í¥°¥é¥à -> userBL -> userBLTarget

¤È¤Ê¤ê¤Þ¤¹¡£

³°Éô¤«¤é¸«¤¿¤é¸«¤¿ÌÜ¤ÏÆ±¤¸¤À¤±¤É¡¢¼ÂºÝ¤ÎBL¤Î´Ö¤ËÊ̤Υ¯¥é¥¹(¾å¤ÎProxy¥¯¥é¥¹¤Ç¤¹¤Í)¤¬¶´¤Þ¤ì¤ëÍѤˤʤê¤Þ¤¹¡£·ë¶É¡¢Spring¤Î¥¿¥°ÉÕ¤±¤Ï°Ê²¼¤Î¤è¤¦¤ËÊѹ¹¤µ¤ì¤Þ¤·¤¿¡£

bean.png

´Ö¤Ë¶´¤Þ¤ì¤¿POJO¤Ï°Ê²¼¤Î¤è¤¦¤ËSpring¤ÇInjection¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

<bean id="userBL" 
  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
  <property name="transactionManager">
    <ref local="transactionManager" />
  </property>
  <property name="target"> ¢­¥¿¡¼¥²¥Ã¥È¤Ë¤¹¤ëPOJO¤ò»ØÄê
    <ref bean="userBLTarget" />
  </property>
  <property name="transactionAttributes">
    <props>   ¢­POJO¤Î¥á¥½¥Ã¥É¤ËÂФ·¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤ÎÀßÄê¤òµ­½Ò
      <prop key="*">PROPAGATION_REQUIRED</prop>
      <!-- <prop key="create">PROPAGATION_MANDATORY</prop> -->
    </props>
  </property>
</bean>

¥È¥é¥ó¥¶¥¯¥·¥ç¥ó´ÉÍýÊýË¡¤Ë¤Ä¤¤¤Æ

¤µ¤Æ»ÈÍѤ¹¤ë¦¤«¤é¸«¤¨¤ëPOJO¤Ç¤¹¤¬¡¢¤â¤È¤â¤È¤ÏUserBL¥¯¥é¥¹¤À¤Ã¤¿¤Î¤Ç¤¹¤¬º£¤Ï´Ö¤Ë

org.springframework.transaction.interceptor.TransactionProxyFactoryBean

¤¬¶´¤Þ¤ì¤Æ¤¤¤ë·Á¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥¯¥é¥¹¤ò·Ðͳ¤¹¤ë¤³¤È¤Ç¥¿¡¼¥²¥Ã¥È¤È¤Ê¤ëUserBL¥¯¥é¥¹¤Î³Æ¥á¥½¥Ã¥É¤Ë¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Î»ØÄê¤ò½ñ¤¯¤³¤È¤¬¤Ç¤­¤ë¤È¤¤¤¦¥ï¥±¤Ç¤¹¡£¾å¤ÎÎã¤Ï

  <property name="transactionAttributes">
    <props>   ¢­POJO¤Î¥á¥½¥Ã¥É¤ËÂФ·¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤ÎÀßÄê¤òµ­½Ò
      <prop key="*">PROPAGATION_REQUIRED</prop>
    </props>
  </property>

¤È¤Ê¤Ã¤Æ¤¤¤Æ¡¢Á´¤Æ¤Î¥á¥½¥Ã¥É¤òPROPAGATION_REQUIRED¤Ë¤¹¤ë¡¢¤È¤¤¤¦»ØÄê¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£PROPAGATION_REQUIRED¤Ï¡¢¤³¤ÎBL¤Î¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¤¿¤È¤­¤Ë¡¢¤¹¤Ç¤Ë¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬³«»Ï¤µ¤ì¤Æ¤¤¤¿¤é¤½¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Ë»²²Ã¤¹¤ë¡¢³«»Ï¤µ¤ì¤Æ¤Ê¤«¤Ã¤¿¤é¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤ò³«»Ï¤¹¤ë¡¢¤È¤¤¤¦°ÕÌ£¤Ë¤Ê¤ê¤Þ¤¹¡£¤Ä¤Þ¤ê¤³¤Î¥á¥½¥Ã¥É¤¬¸Æ¤Ð¤ì¤¿¤È¤­¤Ë¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬³«»Ï¤µ¤ì¤Æ¤Ê¤«¤Ã¤¿¤é¡¢BL¤Î¥á¥½¥Ã¥É¤Î¤Ï¤¸¤á¤Ç¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬³«»Ï¤µ¤ì¡¢Á´¤Æ¤Î½èÍý¤¬ÌäÂê¤Ê¤¯½ª¤ï¤Ã¤¿¤é¾¡¼ê¤Ë¥³¥ß¥Ã¥È¤¹¤ë¡¢¤È¤¤¤¦¤³¤È¤òSpring¤¬¤ä¤Ã¤Æ¤¯¤ì¤ë¤ï¤±¤Ç¤¹¡£¤³¤ì¡¢¤¹¤´¤¤¤³¤È¤Ç¤¹¤Í¡£

¼ÂºÝ¤ËBL¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Æ¤ß¤ë

¼ÂºÝ¤Ë¤ä¤Ã¤Æ¤ß¤Þ¤¹¡£Spring·Ðͳ¤ÇBL¤ò¼èÆÀ¤·¡¢BL¤Îcreate¥á¥½¥Ã¥É¤Ç¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥Ç¡¼¥¿¤òInsert¤·¤Æ¤¤¤Þ¤¹¡£

public class SpringMain {
  public static void main(String[] args) throws IOException {
    DOMConfigurator.configure("log4j.xml");
    ApplicationContext context = new FileSystemXmlApplicationContext(
        new String[] { "beans.xml", "hibernate-spring_test.xml" });
    String name = getUniqueKey();
    IUserBL bl = (IUserBL) context.getBean("userBL");
    bl.create(new UserAttr(name, "¥µ¥ó¥×¥ë¥æ¡¼¥¶£±"));
  }

  /**
   * PK¤òÀ¸À®¤·¤¿¤¤¤À¤±¡£ËܼÁŪ¤Ê°ÕÌ£¥Ê¥·
   */
  private static String getUniqueKey() throws IOException {
    File temp = File.createTempFile("abc", "");
    temp.deleteOnExit();
    String name = temp.getName();
    return name;
  }
}

¼Â¹Ô·ë²Ì¤Ï°Ê²¼¤ÎÄ̤ê

org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean 
  definitions from file [T:\workspace_rad\SpringDBSamples\beans.xml]
org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean 
  definitions from file [T:\workspace_rad\SpringDBSamples\hibernate-spring_test.xml]
org.springframework.orm.hibernate3.LocalSessionFactoryBean - Building new Hibernate SessionFactory
org.hibernate.cfg.SettingsFactory - RDBMS: Oracle, version: Oracle Database 10g 
  Express Edition Release 10.2.0.1.0 - Production
org.hibernate.cfg.SettingsFactory - JDBC driver: Oracle JDBC driver, version: 10.2.0.1.0
org.hibernate.dialect.Dialect - Using dialect: org.hibernate.dialect.OracleDialect
org.hibernate.transaction.TransactionFactoryFactory - Using default transaction strategy (direct JDBC transactions)
org.hibernate.transaction.TransactionManagerLookupFactory - No TransactionManagerLookup 
  configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
org.springframework.orm.hibernate3.HibernateTransactionManager - Using DataSource
  [org.apache.commons.dbcp.BasicDataSource@6e1dec] of Hibernate SessionFactory for HibernateTransactionManager
org.springframework.orm.hibernate3.HibernateTransactionManager - Using transaction
  object [org.springframework.orm.hibernate3.HibernateTransactionManager$HibernateTransactionObject@dc86eb]
org.springframework.orm.hibernate3.HibernateTransactionManager - Creating new 
  transaction with name [nu.mine.kino.bl.IUserBL.create]
org.springframework.orm.hibernate3.HibernateTransactionManager - Opened new 
  Session [org.hibernate.impl.SessionImpl@e29820] for Hibernate transaction
org.springframework.orm.hibernate3.HibernateTransactionManager - Preparing JDBC 
  Connection of Hibernate Session [org.hibernate.impl.SessionImpl@e29820]
-----------------------------afterTransactionBegin
org.springframework.orm.hibernate3.HibernateTransactionManager - Exposing Hibernate transaction 
  as JDBC transaction [org.apache.commons.dbcp.PoolableConnection@1c286e2]
nu.mine.kino.bl.UserBL - create(UserAttr) - start
nu.mine.kino.bl.UserBL - create(UserAttr) - end
org.springframework.orm.hibernate3.HibernateTransactionManager - Triggering beforeCommit synchronization
org.springframework.orm.hibernate3.HibernateTransactionManager - Triggering beforeCompletion synchronization
org.springframework.orm.hibernate3.HibernateTransactionManager - Initiating transaction commit
org.springframework.orm.hibernate3.HibernateTransactionManager - Committing Hibernate transaction
  on Session [org.hibernate.impl.SessionImpl@e29820]
Hibernate: insert into MKINO.USER_ATTR (NAME, USERID) values (?, ?)
-----------------------------beforeTransactionCompletion
-----------------------------afterTransactionCompletion
org.springframework.orm.hibernate3.HibernateTransactionManager - Triggering afterCompletion synchronization
org.springframework.orm.hibernate3.HibernateTransactionManager - Closing Hibernate 
 Session [org.hibernate.impl.SessionImpl@e29820] after transaction
org.springframework.orm.hibernate3.SessionFactoryUtils - Closing Hibernate Session

¤Ê¤ó¤Î¤³¤Ã¤Á¤ã¤Ã¤Æ´¶¤¸¤Ç¤¹¤±¤É¡¢BL¤Î¥á¥½¥Ã¥É¤¬³«»Ï¤µ¤ì¤ëºÝ¤Ë¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬³«¤«¤ì¡¢¥á¥½¥Ã¥É¤¬½ª¤ï¤Ã¤¿¸å¤Ë¥³¥ß¥Ã¥È¤¬¹Ô¤ï¤ì¤Æ¤¤¤ë¤Î¤¬¤ï¤«¤ë¤È»×¤¤¤Þ¤¹¡£¤Ä¤¤¤Ç¤ËHibernate¤ÎSession¤È¤«¤âƱ¤¸¥¿¥¤¥ß¥ó¥°¤Ç³«¤¤¤¿¤êÊĤ¸¤¿¤ê¤¹¤ë¤ó¤Ç¤¹¤Í¡£

RuntimeÎã³°»þ¤Ï¾¡¼ê¤Ë¥í¡¼¥ë¥Ð¥Ã¥¯

¼¡¤Ë¥á¥½¥Ã¥ÉÆâ¤Ç¤ï¤¶¤ÈRuntimeÎã³°¤ò¥¹¥í¡¼¤·¤¿¾ì¹ç¤Î¥í¥°¤Ç¤¹¡£

nu.mine.kino.bl.UserBL - create(UserAttr) - start
org.springframework.orm.hibernate3.HibernateTransactionManager - Triggering beforeCompletion synchronization
org.springframework.orm.hibernate3.HibernateTransactionManager - Initiating transaction rollback
org.springframework.orm.hibernate3.HibernateTransactionManager - Rolling back Hibernate
  transaction on Session [org.hibernate.impl.SessionImpl@e29820]
Exception in thread "main" java.lang.RuntimeException: ¤ª¡¼Îã³°
-----------------------------afterTransactionCompletion
org.springframework.orm.hibernate3.HibernateTransactionManager - Triggering afterCompletion synchronization
org.springframework.orm.hibernate3.HibernateTransactionManager - Closing Hibernate
  Session [org.hibernate.impl.SessionImpl@e29820] after transaction
org.springframework.orm.hibernate3.SessionFactoryUtils - Closing Hibernate Session

Spring¤¬Àµ¤·¤¯¥í¡¼¥ë¥Ð¥Ã¥¯¤·¤Æ¤¯¤ì¤Æ¤¤¤Þ¤¹¡£¼«Ê¬¤¿¤Á¤Ç¤ä¤ëɬÍפϤʤ¤¤ï¤±¤Ç¤¹¡£

¤Á¤Ê¤ß¤ËSpring¤Ç¤ÏRuntimeÎã³°¤Ï¥í¡¼¥ë¥Ð¥Ã¥¯¡¢¤½¤Î¾¤ÎÉáÄ̤ÎÎã³°¤Ï¥³¥ß¥Ã¥È¡¢¤È¤¤¤¦¤Î¤¬¥Ç¥Õ¥©¥ë¥È¤Îư¤­¤ß¤¿¤¤¤Ç¤¹¡£Àè¤Î¥á¥½¥Ã¥É»ØÄê¤Ç¡¢ÉáÄ̤ÎÎã³°¤â¥í¡¼¥ë¥Ð¥Ã¥¯¤ß¤¿¤¤¤Ëµóư¤òÊѤ¨¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¡£

¤½¤Î¾¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó»ØÄê

Àè¤ÎPROPAGATION_REQUIRED¤Ï¤¢¤Ã¤¿¤é¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Ë»²²Ã¡¢¤Ê¤«¤Ã¤¿¤é¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤ò³«»Ï¤¹¤ë¡¢¤Ç¤·¤¿¤¬Â¾¤Ë¤â¿§¡¹»ØÄ꤬¤¢¤ê¤Þ¤¹¡£¤â¤·¤«¤·¤Æ¤è¤¯»È¤ï¤ì¤ë¤Î¤Ï PROPAGATION_MANDATORY¤Ç¤·¤ç¤¦¤«¡£¤³¤ì¤Ï¡¢¤¹¤Ç¤Ë³«»Ï¤µ¤ì¤Æ¤Ê¤«¤Ã¤¿¤éÎã³°¡¢¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£DAO¤È¤«¤ò¤¢¤ä¤Þ¤Ã¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó³«»Ï¤·¤Ê¤¤¤Þ¤Þ¸Æ¤Ó½Ð¤·¤¿¤ê¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¾ì¹ç¤Ê¤É¤Ë»È¤¨¤ë¤«¤Ê¡£¡£

¤ä¤Ã¤Æ¤ß¤Þ¤¹¡£Àè¤Îxml¤Î»ØÄê¤Ë

  <property name="transactionAttributes">
    <props>   ¢­POJO¤Î¥á¥½¥Ã¥É¤ËÂФ·¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤ÎÀßÄê¤òµ­½Ò
      <prop key="*">PROPAGATION_REQUIRED</prop>
      <prop key="create">PROPAGATION_MANDATORY</prop>
             ¢¬create¤È¤¤¤¦¥á¥½¥Ã¥É¤À¤±¤Ï¡¢PROPAGATION_MANDATORY¤Ë¤¹¤ë
    </props>
  </property>

¤òÄɲ䷤Ƥä¤Ã¤Æ¤ß¤Þ¤¹¡£

Exception in thread "main" org.springframework.transaction.IllegalTransactionStateException: 
    Transaction propagation 'mandatory' but no existing transaction found

¤È¤¤¤¦Îã³°¤¬¥¹¥í¡¼¤µ¤ì¤Þ¤·¤¿¡£

¥È¥é¥ó¥¶¥¯¥·¥ç¥ó»ØÄê¤ò¤·¤Ê¤¤¾ì¹ç¤Ï¡¢¡¢¡©

ºÇ¸å¤Ë

  <property name="transactionAttributes">
    <props>
    </props>
  </property>

¤Ê¤É¤È¤·¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó»ØÄê¤ò¤·¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¤É¤¦¤Ê¤ë¤Î¤Ç¤·¤ç¤¦¤«¡£¼Â¹Ô·ë²ÌÇÛ²¼¤ÎÄ̤ê¤Ç¤¹¡£

nu.mine.kino.bl.UserBL - create(UserAttr) - start
org.springframework.orm.hibernate3.SessionFactoryUtils - Opening Hibernate Session
-----------------------------onSave
-----------------------------preFlush
Hibernate: insert into MKINO.USER_ATTR (NAME, USERID) values (?, ?)
-----------------------------postFlush
org.springframework.orm.hibernate3.SessionFactoryUtils - Closing Hibernate Session
nu.mine.kino.bl.UserBL - create(UserAttr) - end

Åö¤¿¤êÁ°¤Ç¤¹¤¬¡¢¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬³«»Ï¤µ¤ì¤Ê¤¤¤Ç½èÍý¤¬¤Ê¤µ¤ì¤Æ¤Þ¤¹¡£Hibernate¤Î¥»¥Ã¥·¥ç¥ó¤Ï³«¤¤¤ÆÊĤ¸¤Æ¤ò¤Á¤ã¤ó¤È¤ä¤Ã¤Æ¤¯¤ì¤Æ¤Þ¤¹¤Í¡£

´ØÏ¢¾ðÊó


¤³¤Îµ­»ö¤Ï

ÁªÂò»è Åêɼ
¤ª¤â¤·¤í¤«¤Ã¤¿ 36  
¤½¤¦¤Ç¤â¤Ê¤¤ 4  

¤³¤Î¥Ú¡¼¥¸¤òdel.icio.us¤ËÄɲà ¤³¤Î¥Ú¡¼¥¸¤ò¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲ䳤Υڡ¼¥¸¤ò´Þ¤à¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯ ¤³¤Î¥Ú¡¼¥¸¤òlivedoor ¥¯¥ê¥Ã¥×¤ËÄɲà ¤³¤Î¥Ú¡¼¥¸¤òYahoo!¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÄɲ䳤Υڡ¼¥¸¤ò´Þ¤àYahoo!¥Ö¥Ã¥¯¥Þ¡¼¥¯
Top / Hibernate / Spring¤ò»È¤Ã¤Æ¥È¥é¥ó¥¶¥¯¥·¥ç¥ó½èÍý¤òµ­½Ò¤¹¤ë

¸½ºß¤Î¥¢¥¯¥»¥¹:28772


źÉÕ¥Õ¥¡¥¤¥ë: filebefore.png 362·ï [¾ÜºÙ] filebl.png 318·ï [¾ÜºÙ] fileschema.png 370·ï [¾ÜºÙ] filebean.png 486·ï [¾ÜºÙ]

¥È¥Ã¥×   ÊÔ½¸ Åà·ë º¹Ê¬ ¥Ð¥Ã¥¯¥¢¥Ã¥× źÉÕ Ê£À½ ̾Á°Êѹ¹ ¥ê¥í¡¼¥É   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS
Last-modified: 2011-11-22 (²Ð) 12:55:33 (179d)