EntityManager persist()方法不会将记录插入数据库

Grz*_*zzz 10 spring hibernate jpa persist

我有使用EntityManager.persist(Object)方法的问题.现在当我摆脱其他问题时,通过app工作没有Exception但是对象没有放在我的数据库中.

我的实体类:

@Entity
@Table(name ="Chain")
public class Chain implements Serializable{

@Id
@Column(name = "id")
  private Long id;
@Column(name = "date")
  private Date date;
@Column(name = "name")
  private String name;
//setters and getters
}
Run Code Online (Sandbox Code Playgroud)

我的道教课:

@Transactional
@Repository("ChainDao")
public class ChainDaoImpl implements ChainDao{


    private EntityManager em;


    @PersistenceContext
    public void setEntityManager(EntityManager em) {
        this. em = em;
    }

    public int saveChain(Chain chain) {
        chain.setDate(new Date());
        chain.setId((long)44);
        Boolean a;
        em.persist(chain);

        return 222;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的xml上下文:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" >
    <property name="persistenceXmlLocation" value="classpath*:META-INF/persistence.xml"></property></bean>


    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

    <bean class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory"
            ref="entityManagerFactory" />
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean> 
Run Code Online (Sandbox Code Playgroud)

并且pereistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
       <persistence-unit name="sample">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <!-- Scan for annotated classes and Hibernate mapping XML files -->
        <properties>
           <property name="hibernate.archive.autodetection" value="class, hbm"/>
           <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
           <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/database"/>
           <property name="hibernate.connection.username" value="postgres"/>
           <property name="hibernate.connection.password" value="pwd"/>
           <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
           <property name="hibernate.show_sql" value="true"/>
        </properties>
        </persistence-unit>

    </persistence>
Run Code Online (Sandbox Code Playgroud)

有谁知道我错过了什么?

Ror*_*ryB 9

你有特殊的例外吗?如果你是的话,知道它是什么会很有帮助.

Stackoverflow上已经存在许多类似的问题:

Spring事务上下文不会持久化数据

Spring,Hibernate和JPA:在entitymanager上调用persist似乎没有提交到数据库

这些建议,你应该尝试加入em.flush()em.persist(chain),并改变@transactional注释

您还应检查是否已通过以下行启用了事务注释:

<tx:annotation-driven transaction-manager="transactionManager"/> 
Run Code Online (Sandbox Code Playgroud)

在.xml配置中

  • 为什么这个答案被接受了?它听起来并不像是解决了你的问题.我有同样的问题,事务就在那里,但EntityManager不知道它.如果我手动调用em.joinTransaction()然后它可以工作,但为什么我必须这样做? (3认同)

小智 7

试试这个:

em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)

PS:你也应该为你的ID设置一个生成方法.

  • `不允许在共享的EntityManager上创建事务 - 使用Spring事务或EJB CMT代替` (4认同)