1

私が定義したセッション ファクトリはnullDAO にあります。ここに私のコードがあります:

@Repository
public class LinkDetailsDAO {

     private SessionFactory sessionFactory;

     @Autowired
     public void setSessionFactory(SessionFactory sessionFactory) {
         this.sessionFactory = sessionFactory;
     }

     Session session = sessionFactory.getCurrentSession();

NullPointerExceptionセッション オブジェクトを作成しようとすると、 がスローされます。

私のアプリケーションコンテキスト:

  <!-- Load Hibernate related configuration -->
  <import resource="hibernate-context.xml"/>

 <context:annotation-config/>
 <context:component-scan base-package="com.Neuverd.*"/>

私の休止状態のコンテキスト:

 <context:property-placeholder location="/WEB-INF/config/testapp.properties" />

<!-- Enable annotation style of managing transactions -->
<tx:annotation-driven transaction-manager="transactionManager" /> 

<!-- Declare the Hibernate SessionFactory for retrieving Hibernate sessions -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
 p:dataSource-ref="dataSource"
 p:configLocation="/WEB-INF/config/hibernate.cfg.xml"
 p:packagesToScan="com.Neuverd"/>

 <!-- Declare a datasource that has pooling capabilities--> 
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
 destroy-method="close"
p:driverClassName="${app.jdbc.driverClassName}"
p:url="${app.jdbc.url}"
p:username="${app.jdbc.username}"
p:password="${app.jdbc.password}"
/>

そして私の休止状態の設定ファイル

<hibernate-configuration>
    <session-factory>
        <!-- We're using MySQL database so the dialect needs to MySQL as well-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <!-- Enable this to see the SQL statements in the logs-->
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">create</property>
    </session-factory>
</hibernate-configuration>

@Resource アノテーションも使用してみました。しかし運がない。Spring 3.1 と Hibernate 4.1 を使用しています。

アプリケーションは、上記の原因により、起動時にBeanCreationExceptionfor をスローします。LinkDetailsDAONullPointerException

sessionFactoryBean とBean が作成された後transactionManager、コンテナーがLinkDetailsDAOBean を作成しようとすると失敗します。null sessionFactoryBean が作成される理由がわかりません!!。のドキュメントsessionFactoryに記載されているように試してみました。動作していません。

4

1 に答える 1

4

sessionFactory.getCurrentSession()コンストラクターを呼び出そうとします。ただし、Spring がセッターを呼び出してセッション ファクトリを注入する前に、まずオブジェクトを構築する必要があります。したがって、明らかに、構築時には、セッション ファクトリは null です。

セッション ファクトリがコンストラクターに挿入され、後でセッションを要求した場合でも、トランザクション コンテキストは存在せずgetCurrentSession()、例外がスローされます。

DAO のメソッド内からのみ、ファクトリからセッションを取得する必要があります。これは、現在のセッション、つまり現在のトランザクションに関連付けられたセッションを取得する方法です。

public void doSomething() {
    Session session = sessionFactory.getCurrentSession();
    ...
}
于 2012-07-25T14:48:22.237 に答える