Hibernate的实体有三种状态:Transient、Persistent、Detached,其中,只有处于Persistent的实体的变更能够被Hibernate监控到并进行相应的操作。
Hibernate对实体状态的操作,在使用了Spring的AOP进行缓存时就有了一些需要说明的问题了。
ProductService是一个产品服务类,提供了获取所有产品getProducts()、获得指定编号产品getProduct(String)、更新指定产品价格updatePrice(String, int)三个接口。
ProductServiceAdvise是一个AOP的Advise,使用Around的方式进行拦截两个与ProductService同名的方法。简单的实例代码如下:
@Service @Transactional(propagation=Propagation.SUPPORTS)
public class ProductService {
public Product getProduct(String productId) {
return (Product) getSession().get(productId, Product.class);
}
@SuppressWarnings("unchecked")
public List<Product> getProducts() {
return getSession().getNamedQuery("GET_ALL_PRODUCTS").list();
}
@Transactional(propagation&