【发布时间】:2014-02-24 17:58:19
【问题描述】:
当我尝试通过 JPA (@persistanceContex) 将数据插入数据库时遇到问题
观察
- 没有出现任何错误;
- 记录未存储到数据库中(保存)
- 当我尝试使用 listAll() 时;它从数据库中检索数据
域
@Entity
public class Test {
@Id
private int id;
@Column(name="full_name")
private String fullName;
@Column(name="mobile_number")
private int mobileNumber;
.....
}
DAO 类
@Repository("testDAO")
@Transactional
public class TestDAO {
private EntityManager entityManager;
@PersistenceContext(unitName="CRUD_Test_Annotation")
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public void save(Test test){
entityManager.persist(test);
}
}
服务
@Service("testService")
@Transactional
public class TestService {
private static final Logger logger = LoggerFactory.getLogger(TestService.class);
@Autowired(required=true)
private TestDAO testDAO;
public void save(Test test){
logger.info("TestService::save()");
testDAO.save(test);
}
public void list(){
testDAO.getAll();
}
}
控制器
@RequestMapping(value = "/add", method = RequestMethod.GET)
public String add(Locale locale, Model model) {
Test test = new Test();
test.setId(xx);
test.setFullName("xxxxx");
test.setMobileNumber(yyyyyy);
testService.save(test);
return "home";
}
应用程序上下文.xml
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 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="CRUD_Test_Annotation" />
<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>
【问题讨论】:
-
hibernate是否创建了insert语句?,添加show_sql看看发生了什么
-
我猜.. 你的
ContextLoaderListener和DispatcherServlet都有一个组件扫描并且都扫描相同的类。导致基本上没有交易。
标签: spring hibernate jpa annotations persistence