2017-01-23 11 views
2

春。例外翻訳はどのように機能しますか?私は次のコードしている

@Repository 
public class UserDAOImpl implements UserDAO { 
    public void addUser(User user) { 
     throw new HibernateException("unchecked exception"); 
    } 
} 

@Service 
public class UserServiceImpl implements UserService { 

    @Autowired 
    private UserDAO userDAO; 

    @Override 
    public void addUser(User user) { 
     try { 
      userDAO.addUser(user); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

のweb.xml:それは十分な例外を翻訳する

<context:component-scan base-package="org.example.dao, 
             org.example.services"/> 
<mvc:annotation-driven /> 
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/> 

ですか?カスタム翻訳者を実装する必要がありますか?

サンプルコードを入手するとよいでしょう。

+0

試しましたか?それは質問に答えるだろう。 – zapl

答えて

0

基本的に、Spring Frameworkおよびその他のSpring関連プロジェクト(Spring Data NoSQLなど)では、org.springframework .dao.DataAccessExceptionを継承した完全な永続性例外の階層を定義しています。この階層は、JDBC、Hibernate、その他のORM実装、JPAなどによってスローされるすべての例外を処理します。

例外アプリケーションでは、例外翻訳を行うには2つのことが必要です。

まず、設定ファイルにorg.springframework.dao.support .PersistenceExceptionTranslator個の実装を設定します。あなたはこのようなあなたのルートの設定クラスでLocalContainerEntityManagerFactoryBeanのBeanを定義することによってこれを行うことができます。

@Bean 
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() 
{ 
Map<String, Object> properties = new Hashtable<>(); 
properties.put("javax.persistence.schema-generation.database.action", 
"none"); 
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter(); 
adapter.setDatabasePlatform("org.hibernate.dialect.MySQL5InnoDBDialect"); //you will chose a dialect that you are using for your project. 
LocalContainerEntityManagerFactoryBean factory = 
new LocalContainerEntityManagerFactoryBean(); 
factory.setJpaVendorAdapter(adapter); 
factory.setDataSource(this.springJpaDataSource()); 
factory.setPackagesToScan("packagenames"); //the packages that contains you @Repositories annotations 
factory.setSharedCacheMode(SharedCacheMode.ENABLE_SELECTIVE); 
factory.setValidationMode(ValidationMode.NONE); 
factory.setJpaPropertyMap(properties); 
return factory; 
} 

をこのクラスLocalContainerEntityManagerFactoryBeanPersistenceExceptionTranslatorを実装しています。だから最初の一歩を踏み出した。

2番目の手順は、@Repositoryアノテーションを使用してリポジトリ/エンティティをマークすることです。これにより、注釈付きBeanは コンフィグレーションPersistenceExceptionTranslatorsを使用して例外変換の対象となることがSpringに通知されます。リポジトリメソッドが永続性を放棄する場合 例外の場合、PersistenceExceptionTranslatorsはこれらの例外を適切に変換します。

+0

このサイズの抜粋は著作権侵害とみなされる可能性があります。あまりにも無関係のテキストです。 – zapl

+0

まさに私が必要なもの!ありがとうございました! – iGreetYou

関連する問題