【问题标题】:NullPointer when call entity Manager调用实体管理器时的 NullPointer
【发布时间】:2023-03-28 23:35:02
【问题描述】:

我尝试使用 Java、Hibernate 和 Spring 编写一些程序。我在调用 SQL 查询时看到 NullPointerException。我可能尝试了互联网上的所有代码示例,但我不知道该怎么做。我该如何解决?这是我的示例代码。有我的完整程序代码:https://github.com/lukasz-chojn/films_database/tree/master/src/main/java/Films

    @Controller
    public class DataFromUserController {
        private FilmDaoImpl filmDaoImpl = new FilmDaoImpl();
        private DirectorDaoImpl directorDaoImpl = new DirectorDaoImpl();
        private Locale locale = Locale.getDefault();
        private Scanner sc = new Scanner(System.in).useLocale(locale);

        public FilmDs collectData() {
            //....

            filmDaoImpl.insert(film);
            directorDaoImpl.insert(director);

            return film;
        }

        private String collectTitle() {
            System.out.print("Podaj tytuł filmu: ");
            String tytul = sc.nextLine();
            List<String> existingEntry = filmDaoImpl.existingTitle();
            if (existingEntry.contains(tytul)) {
                System.out.println("Tytuł jest już w bazie. Podaj inny");
                return collectTitle();
            }
                if (tytul.isEmpty()) {
                    System.out.println("Tytuł nie może być pusty. Podaj go");
                    return collectTitle();
                }
            return tytul;
        }//......
    }

    @Service
    @Transactional
    public class FilmDaoImpl implements FilmDAO {

        @PersistenceContext
        private EntityManager entityManager;

        //......
        @Override
        @SuppressWarnings("unchecked")
        public List<String> existingTitle() {
            List<String> titleInTheDatabase;
    // here is NPE
    return titleInTheDatabase = entityManager.createQuery("SELECT film.tytul FROM FilmDs film").getResultList();
        }

        //....
    }

【问题讨论】:

  • 提供你的persistence.xml,我想实体没有映射
  • 没有persistence.xml。一切都存储在 java 类配置中

标签: java spring hibernate


【解决方案1】:

您自己创建实例,而不是让 spring 为您注入它,这就是为什么您会丢失所有依赖项,如 entitymanager 等。更改您的 DataFromUserController

@Controller
public class DataFromUserController {

@Autowired
private FilmDAO filmDao;

@Autowired
private DirectorDAO directorDao;

.....
}

【讨论】:

  • 当我尝试 Jayesh 代码时,我看到如下堆栈跟踪:pastebin.com/dei2nx7f
  • 不幸的是它不起作用。这是控制器 pastebin.com/AU4XRn3C 的当前代码
  • 第 40 和 41 行,您需要使用自动装配的对象。 filmDao.insert(film); directorDao.insert(director)
猜你喜欢
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2014-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
相关资源
最近更新 更多