我对休眠的使用如下所示:
这就是我配置 sessionFactory 的方式
Configuration configuration = new Configuration()
.addResource(MAPPING_RESSOURCE)// -> hibernate.hbm.xml
.configure(CONFIG_RESSOURCE)// -> hibernate.cfg.xml;
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(configuration.getProperties())
.buildServiceRegistry();
factory = configuration.buildSessionFactory(serviceRegistry);
SessionFactory 配置为使用 ThreadLocalSessionContext(来自 hibernate.cfg.xml 的行):
<property name="current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property>
我从这个 dao 基础方法获取当前会话:
protected Session getSession(){return factory.getCurrentSession();}
我在抽象 dao 基类中获得了一些用于 CRUD 操作的方法,例如“get”:
public T get(int key) throws HibernateException
{
Transaction transaction = null;
try
{
Session session = getSession();
transaction = session.beginTransaction();
T t = (T)session.get(classOfT, key);
transaction.commit();
return t;
}
catch(HibernateException e)
{
if(transaction != null)
transaction.rollback();
throw e;
}
}
现在问题来了。我想使用 guice 的 transactional 属性来缩短代码,如下所示:
@Transactional
public T get(int key) throws HibernateException
{
T t = (T)session.get(classOfT, key);
}
但是,我看到的所有教程都表明 guice 持久性支持是为 JPA 量身定制的,即 EntityManager、persistence.xml 等。是否有可能保留我上面显示的设置并使用@Transactional?
谢谢