EntityManager persist () ne rien enregistrer dans la base de données

My entityManager persist () obtient l'id de sequence et le met à mon objet Image mais L'objet Image lui-même n'apparaît pas dans la base de données. L'EntityManager.flush () donne une erreur donc je ne peux pas commettre de cette façon. Voici mon code.

@Repository
public class ImageDaoImpl extends BaseDao implements ImageDao {

@PersistenceContext
protected EntityManager entityManager;

@Override
@Transactional
public void create(Image image) {       
    JpaTemplate jpaTemplate = getJpaTemplate(entityManager);
    jpaTemplate.persist(image);
}

@Repository
public class BaseDao {

private JpaTemplate jpaTemplate;


public JpaTemplate getJpaTemplate(EntityManager entityManager){
    if(jpaTemplate == null)
        jpaTemplate = new JpaTemplate(entityManager);
    return jpaTemplate;
}

<bean id="entityManagerFactory"
       class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
       p:dataSource-ref="dataSource">
       <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
                <property name="generateDdl" value="true" />
                <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
            </bean>
        </property>
        <property name="persistenceUnitName" value="sample"></property>
    </bean>



    <!-- DataSource Setup -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="org.postgresql.Driver" />
        <property name="url" value="jdbc:postgresql://localhost:5432/imageCapture" />
        <property name="username" value="myusername" />
        <property name="password" value="mypassword" />
    </bean>


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

    <tx:annotation-driven transaction-manager="transactionManager" />
25
demandé sur ivar 2011-03-20 22:06:29
la source

3 ответов

cela se produit généralement lorsque le mouvement ne s'applique pas.. Je doute que @transactional interceptor n'intercepte pas correctement.

26
répondu Premraj 2011-03-20 23:16:15
la source

persist() signifie "ajouter un objet à la liste des entrées gérées". Pour sauvegarder object to data base vous devez appeler flush() méthode. Mais rappelez-vous que vous devez appeler à l'intérieur de la transaction.

//modifier: Exemple de méthode de sauvegarde.

public void save(T t){
    // begin transaction 
    em.getTransaction().begin();
    if (!em.contains(t)) {
        // persist object - add to entity manager
        em.persist(t);
        // flush em - save to DB
        em.flush();
    }
    // commit transaction at all
    em.getTransaction().commit();
}

Ce n'est pas le meilleur que vous pouvez faire, mais assez bon.

26
répondu Koziołek 2018-05-22 17:29:30
la source

Vérifier votre mvc-dispatcher-servlet.xml. Ici en <context:component-scan base-package="pass"/> pass doit être égal à package où vos controllers sont

0
répondu zafezo 2016-05-25 22:33:16
la source

Autres questions sur