2323import org .seasar .doma .jdbc .dialect .MysqlDialect ;
2424import org .seasar .doma .jdbc .dialect .PostgresDialect ;
2525import org .seasar .doma .jdbc .dialect .StandardDialect ;
26+ import org .seasar .doma .message .Message ;
2627import org .springframework .boot .autoconfigure .jdbc .DataSourceAutoConfiguration ;
2728import org .springframework .context .annotation .AnnotationConfigApplicationContext ;
2829import org .springframework .context .annotation .Bean ;
2930import org .springframework .context .annotation .Configuration ;
31+ import org .springframework .dao .CannotAcquireLockException ;
32+ import org .springframework .dao .DataAccessException ;
33+ import org .springframework .dao .DataIntegrityViolationException ;
34+ import org .springframework .dao .QueryTimeoutException ;
35+ import org .springframework .dao .support .PersistenceExceptionTranslator ;
3036import org .springframework .jdbc .datasource .TransactionAwareDataSourceProxy ;
3137
3238import javax .sql .DataSource ;
3339
40+ import java .sql .SQLException ;
41+ import java .sql .SQLTimeoutException ;
42+
3443import static org .junit .Assert .*;
3544import static org .hamcrest .CoreMatchers .*;
3645
@@ -56,6 +65,8 @@ public void testAutoRegisteredConfig() {
5665 is (instanceOf (GreedyCacheSqlFileRepository .class )));
5766 assertThat (config .getNaming (), is (Naming .DEFAULT ));
5867 assertThat (config .getJdbcLogger (), is (instanceOf (UtilLoggingJdbcLogger .class )));
68+ PersistenceExceptionTranslator translator = this .context .getBean (PersistenceExceptionTranslator .class );
69+ assertThat (translator ,is (instanceOf (DomaPersistenceExceptionTranslator .class )));
5970 }
6071
6172 @ Test
@@ -72,6 +83,8 @@ public void testConfigWithDomaConfigBuilder() {
7283 is (instanceOf (NoCacheSqlFileRepository .class )));
7384 assertThat (config .getNaming (), is (Naming .SNAKE_UPPER_CASE ));
7485 assertThat (config .getJdbcLogger (), is (instanceOf (UtilLoggingJdbcLogger .class )));
86+ PersistenceExceptionTranslator translator = this .context .getBean (PersistenceExceptionTranslator .class );
87+ assertThat (translator ,is (instanceOf (DomaPersistenceExceptionTranslator .class )));
7588 }
7689
7790 @ Test
@@ -88,6 +101,34 @@ public void testConfigWithConfig() {
88101 is (instanceOf (NoCacheSqlFileRepository .class )));
89102 assertThat (config .getNaming (), is (Naming .SNAKE_LOWER_CASE ));
90103 assertThat (config .getJdbcLogger (), is (instanceOf (UtilLoggingJdbcLogger .class )));
104+ PersistenceExceptionTranslator translator = this .context .getBean (PersistenceExceptionTranslator .class );
105+ assertThat (translator ,is (instanceOf (DomaPersistenceExceptionTranslator .class )));
106+ }
107+
108+ @ Test
109+ public void testSQLExceptionTranslator () {
110+ this .context .register (DomaAutoConfiguration .class ,
111+ DataSourceAutoConfiguration .class );
112+ this .context .refresh ();
113+ PersistenceExceptionTranslator translator = this .context .getBean (PersistenceExceptionTranslator .class );
114+ {
115+ // Translated by SQLErrorCodeSQLExceptionTranslator
116+ DataAccessException dataAccessException = translator .translateExceptionIfPossible (
117+ new JdbcException (Message .DOMA2008 , new SQLException ("Acquire Lock on H2" , "SqlState" , 50200 , null )));
118+ assertThat (dataAccessException , is (instanceOf (CannotAcquireLockException .class )));
119+ }
120+ {
121+ // Translated by SQLExceptionSubclassTranslator(fallback)
122+ DataAccessException dataAccessException = translator .translateExceptionIfPossible (
123+ new JdbcException (Message .DOMA2008 , new SQLTimeoutException ("Timeout" , "SqlState" , -1 , null )));
124+ assertThat (dataAccessException , is (instanceOf (QueryTimeoutException .class )));
125+ }
126+ {
127+ // Translated by SQLStateSQLExceptionTranslator (fallback)
128+ DataAccessException dataAccessException = translator .translateExceptionIfPossible (
129+ new JdbcException (Message .DOMA2008 , new SQLException ("With check violation" , "44" , -1 , null )));
130+ assertThat (dataAccessException , is (instanceOf (DataIntegrityViolationException .class )));
131+ }
91132 }
92133
93134 @ After
0 commit comments