Spring+Hibernate統合についてno transaction is in progress

1905 ワード

構成の問題だけであれば、ネット上で構成に関するチュートリアルを見つけることができます.私が言いたいのは、あなたの構成に問題がないときですが、この異常な処理がずっと発生しています.以下は私が異常なコードを出しています(私の構成は問題ありません.ネット上の多くのチュートリアルと同じです).
@Repository("accountDaoImpl")
public class AccountDaoImpl  implements AccountDao{

    @Autowired
    private HibernateTemplate hibernateTemplate;

    @Override
    public String register(Restaurant r, Store s, StoreInfo si) {
        // TODO Auto-generated method stub
        Session session = hibernateTemplate.getSessionFactory().openSession();
        session.save(r);
        session.save(s);
        session.save(si);
        System.out.println(s.getId());
        session.flush();
        session.close();

        return String.valueOf(s.getId());
    }
}

もしあなたが私の上の使い方と同じなら、私たちは明らかな間違いを犯したと言いたいです.HibernateTemplateを自動的にアセンブリした以上、なぜsessionのsave()メソッドを一周するのでしょうか.コードを次のような使い方に変更すれば大丈夫で、データも正常に保存できます.
hibernateTemplate.save(r);
hibernateTemplate.save(s);
hibernateTemplate.save(si);

上の操作セッションをすべてHibernateTemplateを操作すればいいです.具体的な原理は,私もはっきりしていない.springが配置したトランザクションドメインはsessionのレベルに達していないと思います.具体的な原理は後で深く研究します.私はもう2日も遅れているので、ここに書いて、皆さんのために貴重な時間を節約したいと思っています.