Я пытаюсь изучить структуру Spring и работаю над учебниками множественного обзора.Оператор транзакции не доступен Spring/JPA/Hibernate - Pluralsight
У меня возникли проблемы и не знаю, как их решить. Hibernate и JPA были добавлены в проект, они созданы отлично. В следующей части учебника показано, как вы будете использовать диспетчер Entity Manager и как вы собираетесь сохранять объект в базе данных.
Мой код имитирует его, за исключением того, что я обновился до новой версии Spring и добавил массу комментариев.
Ошибка я получаю это: HTTP Status 500 - Request processing failed; nested exception is javax.persistence.TransactionRequiredException: No transactional EntityManager available
Менеджер Entity называется, декларируются и определяются в этих сниппета.
Контроллер:
@Controller
@SessionAttributes("goal")
public class GoalController {
@Autowired
private GoalService goalService;
@RequestMapping(value = "addGoal", method = RequestMethod.POST)
public String updateGoal(@Valid @ModelAttribute("goal") Goal goal, BindingResult result) {
...
goalService.save(goal);
return "redirect:index.jsp";
}
}
GoalService представляет собой интерфейс, который имеет в нем простую Goal save(Goal goal);
, который затем реализуется с помощью GoalServiceImpl.
GoalServiceImpl:
@Service("goalService")
public class GoalServiceImpl implements GoalService {
@Autowired
private GoalRepository goalRepository;
@Override
public Goal save(Goal goal) {
return goalRepository.save(goal);
}
GoalRepository имеет ту же картину.
GoalrespositoryImpl:
@Repository("goalRepository")
общественного класса GoalRepositoryImpl реализует GoalRepository {
@PersistenceContext
private EntityManager entityManager;
@Override
public Goal save(Goal goal) {
entityManager.persist(goal);
return goal;
}
}
Я вернулся на видео и не может видеть, где он мог бы идти неправильно , Я прошел через него в отладке, но не вижу ничего очевидного и, даже если бы это было, я, вероятно, не видел бы его.
Может ли кто-нибудь пролить свет, пожалуйста?
Большое спасибо.
EDIT: Если я прокомментирую сущность, она работает нормально, очевидно, что она не сохраняется, но не исключается.
@Override
public Goal save(Goal goal) {
//entityManager.persist(goal);
return null;
}
EDIT - DataSource:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">
<context:annotation-config/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="punit"/>
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
</bean>
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
<entry key="hibernate.hbm2ddl.auto" value="create"/>
<entry key="hibernate.format_sql" value="true"/>
</map>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/fitnessTracker?autoReconnect=true"/>
<property name="username" value="root"/>
<property name="password" value="password"/>
</bean>
Где вы определили источник данных? –
@prashantthakre - я отредактировал вопрос с деталями, так как есть большой объем кода, спасибо за то, что посмотрели. – null
Похоже, вы возили свой 'dispatcher-config.xml', можете ли вы проверить, что у вас есть правильный код, например' и ' –