Springサービスクラスで@Transactionalアノテーションを使用してアプリケーションを開発していました。 db層にアクセスするには、必要なときに現在のセッションを返すAbstractDaoクラスがあります。すなわちSpring MVCとHibernateを使用した非トランザクションDB呼び出しのベストプラクティス
@Autowired
@Qualifier("sessionFactory")
private SessionFactory sessionFactory;
protected Session getSession() {
session = sessionFactory.getCurrentSession();
}
protected Criteria createEntityCriteria() {
return getSession().createCriteria(persistentClass);
}
public List<T> findByCriteria(Criterion criterion) {
Criteria criteria = createEntityCriteria();
criteria.add(criterion);
return criteria.list();
}
私は本当にそれを必要としないように私には、国境を越えたサポートを削除することを考えていると私は私が毎秒デシベルのインサートの多くの数をサポートする必要があるとして、DB呼び出しのパフォーマンスを向上させたいです。
1)HibernateとSpringで非transnational db操作を使用することはできますか?
2)非トランザクションをサポートするために上記のコードをどのように変更できますか? 上記のコードを次のように作成できますか?
private Session session;
protected Session getSession() {
if (session == null) {
session = sessionFactory.openSession();
}
return session;
}
したがって、createEntityCriteria()はget session()を呼び出すことができます。したがって、上記のコードでユーザーの要求(HTTPスプリングMVC要求)ごとに1つのセッションを管理できます。
ユーザーのリクエストの最後にセッションを終了する必要がありますか?したがって、毎秒300 MVCのユーザリクエストがあると、DBへの300のJDBCコールが開かれます(sessionFactory.openSession()は新しいJDBCコールを作成します)。
トランザクションを使用する必要はありませんが、ここでは注意が必要です。トランザクションは便利です。多少の読書が整っているかもしれません。 https://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/ch13.html – Taylor