2010-06-23 9 views
7

J'ai décidé de déplacer un de mes projets d'iBatis vers MyBatis et j'ai rencontré un problème avec insertion.Problème d'insertion de MyBatis 3.0.1

mappeur xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
       "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
<mapper namespace="bap.persistance.interfaces.ArticleMapper"> 
<insert id="insertTestA"> 
    insert into test_a (cookie) values('tomek pilot'); 
</insert> 
</mapper> 

fichier mappeur java:

public interface ArticleMapper { 
void insertTestA(); 
} 

mise en œuvre de cartographe:

String resource = "bap/persistance/MyBatis_xml/MyBatisConfig.xml"; 

.... 

... 
public void createArticle(Article article) throws IOException { 
    Reader reader = Resources.getResourceAsReader(resource); 
    SqlSessionFactory sqlSessionFactory = 
      new SqlSessionFactoryBuilder().build(reader); 
    SqlSession session = sqlSessionFactory.openSession(); 

    try{ 
    ArticleMapper mapper = session.getMapper(ArticleMapper.class); 
    mapper.insertTestA(); 
    } catch(Exception e){ 
    e.printStackTrace(); 
    } finally{ 
    session.close(); 
    } 
    return article.getId(); 
} 
... 

... line omitted for brevity. 

la table en cours d'utilisation:

CREATE TABLE test_a 
(
    cookie text 
) 
WITH (OIDS=FALSE); 

Je suis en train de courir avec cette mybatis 3.0.1, 3.0.3 printemps, postgresql 8.3 (en utilisant postgresql-8.4-701.jdbc3.jar)

Je crois que tous les réglages de passe-partout est correctement configuré (je peux exécuter une sélection sur une autre table.

J'ai testé la Inser manuellement et il fonctionne très bien (insert into test_a (cookie) values('some stuff');)

Pour une raison quelconque l'insert n'exécute pas et aucune trace de la pile apparaît :-(

Tous les conseils seront les plus appréciés: -

+0

... Quelqu'un aurait-il l'amabilité de créer un tag pour 'MyBatis'? Je n'ai pas la réputation de le faire ;-) – vector

+0

hors sujet Je sais, mais je dois recommander le plugin mybatis guice, il réduit le code plaque de la chaudière et gère la session SQL pour vous. Ça berce !! http://code.google.com/p/mybatis/wiki/Guice – Andy

Répondre

14

Vous n'avez pas validé votre transaction. Essayez d'ajouter un "session.commit()".

+1

Vous avez sauvé le jour! MERCI BEAUCOUP! ... parle de se sentir gêné maintenant. Je pensais avoir regardé de près les exemples étriqués dans le nouveau manuel. Il s'avère que session.commit() est mentionnée une fois sur la page 56 de 64 :-( Et à propos de ça, de toute façon, merci encore! – vector