Spring EntityManager未在独立应用程序中持久化

Spring EntityManager未在独立应用程序中持久化,spring,hibernate,entitymanager,Spring,Hibernate,Entitymanager,让EntityManager在我的独立应用程序中持久化@Entity对象时遇到问题。没有错误,但没有任何内容被持久化到HSQL数据库中。 我肯定这一定是件傻事,但我现在对此束手无策。我找了又找,什么都试了,但还是没法用 appconfig.xml: <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" /> <bean id="produ

让EntityManager在我的独立应用程序中持久化@Entity对象时遇到问题。没有错误,但没有任何内容被持久化到HSQL数据库中。 我肯定这一定是件傻事,但我现在对此束手无策。我找了又找,什么都试了,但还是没法用

appconfig.xml:

<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" />
<bean id="productDaoImpl" class="test.ProductDao"/>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>
<context:component-scan base-package="test">
</context:component-scan>
ProductDao.java:

package test;
import org.springframework.dao.DataAccessException;
public interface ProductDao {
public void save(EntityObj obj) throws DataAccessException;
}
ProductDaoImpl.java:

package test;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
@Transactional
public class ProductDaoImpl implements ProductDao {
@PersistenceContext
private EntityManager entityManager;
public EntityManager getEntityManager() {
return entityManager;
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Transactional (readOnly = false)
public void save(EntityObj obj)
{
try
{
entityManager.persist(obj);
entityManager.flush();
}
catch(Exception e)
{
e.printStackTrace();
}
}    
}
Main.java:

package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Main {
public static void main(String[] args)
{
ApplicationContext springContext = new FileSystemXmlApplicationContext("classpath*:appconfig.xml");
ProductDao dao = (ProductDao) springContext.getBean("productDaoImpl");
EntityObj obj = new EntityObj();
obj.setValue("Blah");
dao.save(obj);
}
}
没有任何错误,它看起来像是保存了EntityObj,但数据库中没有保存任何内容。我感觉它与事务相关,可能是因为我是如何实例化对象的,但我不确定。
ENTITYOBJ数据库表是自动创建的,只是没有数据。

可能是重复的感谢,但不,我没有调用createEntityManager。这是注射。此外,事务应该通过@Transactional注释创建,而不必显式创建事务。这无关紧要。这是关于HSQLDB的正常关闭,而不是关于JPA和事务。抱歉,刚才看到了这一点,你是对的。将Thread.sleep(1000)添加到我的主方法的末尾可以修复它。这是正确的做法还是有更好的方法?谢谢看这篇文章:可能是重复的谢谢,但不,我不是在给createEntityManager打电话。这是注射。此外,事务应该通过@Transactional注释创建,而不必显式创建事务。这无关紧要。这是关于HSQLDB的正常关闭,而不是关于JPA和事务。抱歉,刚才看到了这一点,你是对的。将Thread.sleep(1000)添加到我的主方法的末尾可以修复它。这是正确的做法还是有更好的方法?感谢您浏览本帖:
package test;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
@Repository
@Transactional
public class ProductDaoImpl implements ProductDao {
@PersistenceContext
private EntityManager entityManager;
public EntityManager getEntityManager() {
return entityManager;
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Transactional (readOnly = false)
public void save(EntityObj obj)
{
try
{
entityManager.persist(obj);
entityManager.flush();
}
catch(Exception e)
{
e.printStackTrace();
}
}    
}
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Main {
public static void main(String[] args)
{
ApplicationContext springContext = new FileSystemXmlApplicationContext("classpath*:appconfig.xml");
ProductDao dao = (ProductDao) springContext.getBean("productDaoImpl");
EntityObj obj = new EntityObj();
obj.setValue("Blah");
dao.save(obj);
}
}