내 서비스에서 JUnit 테스트를 실행하면 데이터베이스에 새 엔티티가 성공적으로 추가되지만 내 컨트롤러에서 서비스를 호출하면 데이터베이스에 저장되지 않습니다. 내가 뭘 놓치고 있니?스프링 JPA가 데이터베이스에 저장하지 않습니다.
jpa.xml
<jpa:repositories base-package="com.mypackage.commons" />
<bean id="jpaVendorAdapter"
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="database" value="MYSQL" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="jdbcDataSource" />
<property name="jpaVendorAdapter" ref="jpaVendorAdapter" />
<!-- spring based scanning for entity classes -->
<property name="packagesToScan" value="com.mypackage" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager" />
<tx:annotation-driven />
@Controller
@Path("/users")
public class MyAPI {
@Autowired
private UserService userService;
@POST
@Path("/add")
@Consumes(MediaType.APPLICATION_JSON)
@Transactional
public Response addUser(User newUser) {
userService.create(newUser);
}
}
왜'Transactional' @에서 컨트롤러 레벨? –
내가 블로그 게시물에서 본 것 같아서 내 문제를 해결하기 위해 노력했다. – Hank
컨트롤러에서 지속 된 인스턴스가 필요하지 않기 때문에 @transactional은 서비스 수준에서만 사용해야한다고 생각한다. –