存储库实现中的java.lang.NullPointerException(JPA+;Hibernate)
Project正在编译,但在浏览器发出请求时出错:存储库实现中的java.lang.NullPointerException(JPA+;Hibernate),java,spring,hibernate,spring-orm,Java,Spring,Hibernate,Spring Orm,Project正在编译,但在浏览器发出请求时出错: ava.lang.NullPointerException at org.belarusgo.repository.jpa.JpaNewsRepositoryImpl.findById(JpaNewsRepositoryImpl.java:24) at org.belarusgo.repository.jpa.JpaNewsRepositoryImpl.findById(JpaNewsRepositoryImpl.java:12
ava.lang.NullPointerException
at org.belarusgo.repository.jpa.JpaNewsRepositoryImpl.findById(JpaNewsRepositoryImpl.java:24)
at org.belarusgo.repository.jpa.JpaNewsRepositoryImpl.findById(JpaNewsRepositoryImpl.java:12)
at org.belarusgo.service.BelarusGoServiceImpl.findNewsById(BelarusGoServiceImpl.java:48)
还有一个日志:
16:13:29,455 DEBUG JpaTransactionManager:371 - Opened new EntityManager [org.hibernate.jpa.internal.EntityManagerImpl@4e54a245] for JPA transaction
16:13:29,459 DEBUG DataSourceUtils:153 - Setting JDBC Connection [Pooled connection wrapping physical connection org.postgresql.jdbc.PgConnection@5d7ad29] read-only
16:13:29,460 DEBUG TransactionImpl:51 - begin
16:13:29,461 DEBUG JpaTransactionManager:403 - Exposing JPA transaction as JDBC transaction [org.springframework.orm.jpa.vendor.HibernateJpaDialect$HibernateConnectionHandle@4f50eb69]
16:13:29,462 DEBUG BelarusGoServiceImpl:47 - From findNewsById(3)
16:13:29,463 DEBUG JpaTransactionManager:851 - Initiating transaction rollback
16:13:29,463 DEBUG JpaTransactionManager:538 - Rolling back JPA transaction on EntityManager [org.hibernate.jpa.internal.EntityManagerImpl@4e54a245]
16:13:29,463 DEBUG TransactionImpl:86 - rolling back
16:13:29,464 DEBUG DataSourceUtils:222 - Resetting read-only flag of JDBC Connection [Pooled connection wrapping physical connection org.postgresql.jdbc.PgConnection@5d7ad29]
16:13:29,465 DEBUG JpaTransactionManager:600 - Closing JPA EntityManager [org.hibernate.jpa.internal.EntityManagerImpl@4e54a245] after transaction
16:13:29,466 DEBUG EntityManagerFactoryUtils:435 - Closing JPA EntityManager
16:13:29,468 DEBUG ExceptionHandlerExceptionResolver:133 - Resolving exception from handler [public org.springframework.web.servlet.ModelAndView org.belarusgo.web.controller.NewsController.findNews(int)]: java.lang.NullPointerException
16:13:29,469 DEBUG ResponseStatusExceptionResolver:133 - Resolving exception from handler [public org.springframework.web.servlet.ModelAndView org.belarusgo.web.controller.NewsController.findNews(int)]: java.lang.NullPointerException
16:13:29,470 DEBUG DefaultHandlerExceptionResolver:133 - Resolving exception from handler [public org.springframework.web.servlet.ModelAndView org.belarusgo.web.controller.NewsController.findNews(int)]: java.lang.NullPointerException
16:13:29,471 DEBUG DispatcherServlet:993 - Could not complete request
java.lang.NullPointerException
at org.belarusgo.repository.jpa.JpaNewsRepositoryImpl.findById(JpaNewsRepositoryImpl.java:24)
at org.belarusgo.
repository.jpa.JpaNewsRepositoryImpl.findById(JpaNewsRepositoryImpl.java:12)
persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
<persistence-unit name="belarusgo" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<properties>
<property name="hibernate.connection.driver_class"
value="org.postgresql.Driver"/>
<property name="hibernate.connection.url"
value="jdbc:postgresql://localhost:5432"/>
<property name="hibernate.connection.username" value="postgres"/>
<property name="hibernate.connection.password" value="1234"/>
<property name="hibernate.dialect"
value="org.hibernate.dialect.PostgreSQL9Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
新闻的基本实体:
@MappedSuperclass
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Integer id;
新闻:
@Entity
@Table(name = "news")
public class News extends BaseEntity {
@Column(name = "published_date")
//@Temporal(TemporalType.DATE)
private Date publishedDate;
@Column(name = "headline", length = 200)
@NotNull
@Size(min=5, max=200)
private String headline;
@Column(name = "author", length = 100)
@NotNull
@Size(min=5, max=100)
private String author;
@Column(name = "text")
@NotNull
@Size(min=20)
private String text;
服务实施:
@Service
@Transactional
public class BelarusGoServiceImpl implements BelarusGoService{
private PlayerRepository playerRepository;
private TournamentRepository tournamentRepository;
private NewsRepository newsRepository;
@Autowired
public BelarusGoServiceImpl(PlayerRepository playerRepository,
TournamentRepository tournamentRepository,
NewsRepository newsRepository) {
this.playerRepository = playerRepository;
this.tournamentRepository = tournamentRepository;
this.newsRepository = newsRepository;
}
@Override
@Transactional(readOnly = true)
public News findNewsById(int id) {
logger.debug("From findNewsById({})", id);
return newsRepository.findById(id);
}
public class JpaNewsRepositoryImpl implements NewsRepository {
@PersistenceContext(unitName = "belarusgo")
private EntityManager em;
@Override
public News findById(Integer id) {
return this.em.find(News.class, id);
}
存储库实现:
@Service
@Transactional
public class BelarusGoServiceImpl implements BelarusGoService{
private PlayerRepository playerRepository;
private TournamentRepository tournamentRepository;
private NewsRepository newsRepository;
@Autowired
public BelarusGoServiceImpl(PlayerRepository playerRepository,
TournamentRepository tournamentRepository,
NewsRepository newsRepository) {
this.playerRepository = playerRepository;
this.tournamentRepository = tournamentRepository;
this.newsRepository = newsRepository;
}
@Override
@Transactional(readOnly = true)
public News findNewsById(int id) {
logger.debug("From findNewsById({})", id);
return newsRepository.findById(id);
}
public class JpaNewsRepositoryImpl implements NewsRepository {
@PersistenceContext(unitName = "belarusgo")
private EntityManager em;
@Override
public News findById(Integer id) {
return this.em.find(News.class, id);
}
从
@PersistenceContext
中删除unitName=“白俄罗斯”
。仍然不起作用从@PersistenceContext
中删除unitName=“白俄罗斯”
。仍然不起作用