iGr*_*You 3 java spring exception repository
我有以下代码:
@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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
网络.xml:
<context:component-scan base-package="org.example.dao,
org.example.services"/>
<mvc:annotation-driven />
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
Run Code Online (Sandbox Code Playgroud)
翻译例外就足够了吗?我应该实施自定义翻译吗?
如果能得到示例代码就好了。
基本上,Spring Framework 和其他 Spring 相关项目(例如 Spring Data NoSQL)定义了继承自org.springframework .dao.DataAccessException的完整持久异常层次结构。该层次结构负责处理 JDBC、Hibernate、其他 ORM 实现和 JPA 等抛出的所有异常。
在你的网络应用程序中,你需要做两件事来实现异常转换。
首先,在配置文件中配置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();
//you will chose a dialect that you are using for your project.
adapter.setDatabasePlatform("org.hibernate.dialect.MySQL5InnoDBDialect");
LocalContainerEntityManagerFactoryBean factory =
new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(adapter);
factory.setDataSource(this.springJpaDataSource());
//the packages that contains you @Repositories annotations
factory.setPackagesToScan("packagenames");
factory.setSharedCacheMode(SharedCacheMode.ENABLE_SELECTIVE);
factory.setValidationMode(ValidationMode.NONE);
factory.setJpaPropertyMap(properties);
return factory;
}
Run Code Online (Sandbox Code Playgroud)
此类LocalContainerEntityManagerFactoryBean实现PersistenceExceptionTranslator。所以你已经迈出了第一步。
第二步是用@Repository注释标记您的存储库/实体。这告诉 Spring 带注释的 bean 可以使用配置的PersistenceExceptionTranslators. 如果存储库方法抛出任何持久性异常,则会PersistenceExceptionTranslators适当地转换这些异常。
摘自Nicholas S. Williams 的Professional Java for Web Applications。
| 归档时间: |
|
| 查看次数: |
10355 次 |
| 最近记录: |