当前位置: 首页 > 知识库问答 >
问题:

Spring JPA无法通过EntityDao

赫连照
2023-03-14
@Service("articleService")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class ArticleServiceImpl implements ArticleService {


private ArticleDao articleDao;

  @Autowired
  public ArticleServiceImpl(ArticleDao articleDao) {
    this.articleDao = articleDao;
  }

  public ArticleServiceImpl() {
  }

  @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
  public void addArticle(Article article) {
    articleDao.saveArticle(article);
  }
}
@Repository("articleDao")
public class ArticleDaoImpl implements ArticleDao {

  private EntityManager em;

  @PersistenceContext
  public void setEntityManager(EntityManager em) {
    this.em = em;
  }

  // To Save the article detail
  public void saveArticle(Article article) {
    article.setAddedDate(new Date());
    em.persist(article);
  }
}
public class InputDatabaseServiceImpl implements InputDatabaseService {

public ArticleService articleService;


public InputDatabaseServiceImpl(ArticleService articleService){
    this.articleService= articleService;
}

public int inputArticle(Article article) {
    articleService.saveArticle(article);
    return 0;
}
<context:property-placeholder location="/WEB-INF/database.properties" />

<tx:annotation-driven transaction-manager="transactionManager" /> 

<!-- Declare a datasource that has pooling capabilities--> 
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close"
p:driverClass="${database.driver}"
p:jdbcUrl="${database.url}"
p:user="${database.user}"
p:password="${database.password}"
p:acquireIncrement="5"
p:idleConnectionTestPeriod="60"
p:maxPoolSize="100"
p:maxStatements="50"
p:minPoolSize="10" />

<!-- Declare a JPA entityManagerFactory-->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
<property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property>
<property name="persistenceUnitName" value="hibernatePersistenceUnit" />
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" >
<property name="showSql" value="true"/>
</bean>
</property>
</bean>

<!-- Declare a transaction manager-->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean> 
</beans>

每当我从我的endpoint调用InputArticle类时,我在ArticleService.SaveArticle(article);行中得到NullPointerExpcetion

我知道这是最容易解决的例外,但我已经挣扎了一段时间,我需要帮助…任何人都可以给我一个提示,我错过了什么?

共有1个答案

诸福
2023-03-14

正在发生的情况是ArticleService属性没有初始化。

这可能是由于InputDatabaseServiceImpl bean配置不匹配,或者在注入依赖项时(如果bean是autowired的)。

试试这个:

public class InputDatabaseServiceImpl implements InputDatabaseService {


   @Autowired
   public ArticleService articleService;

   public InputDatabaseServiceImpl(){
      //no need of arguments constructor
   }

   public int inputArticle(Article article) {
      articleService.saveArticle(article);
      return 0;
   }

}
@Service("articleService")
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
public class ArticleServiceImpl implements ArticleService {

  @Autowired
  private ArticleDao articleDao;


  public ArticleServiceImpl() {
     //default constructor required for @Autowired
  }

  public ArticleServiceImpl() {
  }

  @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
  public void addArticle(Article article) {
    articleDao.saveArticle(article);
  }
}
 类似资料:
  • 我正在使用Spring MVC/Security/JPA/Hibernate开发一个web应用程序。 我有一个用户类,它与UserRole有一个omany关系。 UserRole类与用户之间有很多关系。 用户存储库界面非常简单。 当我使用下面的代码片段使用存储库加载用户信息时,它会很好地检索用户和用户角色数据。 这是日志文件。 然而,问题出在这里。 如果我使用UserRepository的save

  • 问题内容: 以下是我运行时遇到的错误: 问题答案: 在没有空格的路径中创建您的virtualenv环境。这就是为什么它发生的原因: 创建环境时,它会建立一个目录。在该目录中是与环境有关的所有可执行文件。有些是脚本。如您所知,hashbang用来告诉系统使用什么解释程序来运行脚本。您可能经常在脚本顶部看到此信息: 如果脚本位于,则告诉系统运行以下命令来执行脚本: 就您而言,virtualenv正在创

  • 因此,我在android studio中编写登录和注册代码,让我粘贴到这里: 这是按钮按下的代码: 我得到以下异常: E/androidRuntime:致命异常:主进程:com.example.myapplication,PID:3980 Java . lang . illegalstateexception:无法执行Android的方法:onClick at Android x . app co

  • 问题内容: 我有一个使用socket.IO的node.js应用程序。它可以在http上正常工作,但是当尝试通过https连接到套接字时,没有任何反应。 这是代码的一部分: 和功能: 客户端连接如下: 正如我说的,在http上一切正常,但是在https上连接会给我“连接被中断”。我究竟做错了什么? 问题答案: 您不能像服务器那样初始化服务器。您必须启动一个单独的https服务器,然后将socket.

  • 我正试图通过Composer(OS X El Capitan 10.11.3)安装Yi2。 是我干的 然后 我也有类似的错误 我不知道为什么会这样。我试图重新安装(composer和asset插件)、diff版本以及yiisoft/yii2.0的相同问题。9需要bower asset/jquery 2.2@稳定的

  • Python: 2.7.12 Pip: 8.1.1 当I时,显示如下: 例外情况: Traceback(最近的调用最后): 文件“/usr/lib/python2.7/dist packages/pip/basecommand.py”,第209行,在main中 状态=self.run(选项,参数) 文件"/usr/lib/python2.7/dist-包/pip/命令/install.py",第3