2013-05-12 2 views
0

J'utilise hibernate 3 et spring 3.0.7, j'essaye d'obtenir mon code pour sauver une entité à la base de données mais il ne le fera tout simplement pas.Hibernate & Spring 3 pas d'enregistrement

J'ai essayé tout avec mais il semble qu'il y ait quelque chose que je fais mal.

ici est ma classe qui utilise la méthode dao

public boolean SAVEDATA (DataHolder support, type int, propriétaires trouvés) {

TempData temp = new TempData(); 
    temp.setDate(holder.getDate()); 
    temp.setTimestamp(new Timestamp(holder.getDate().getTime())); 
    temp.setName(holder.getName()); 
    temp.setComId(holder.getCom().getComId()); 
    temp.setSymbol(holder.getCom().getSymbol()); 
    temp.setPercent(holder.getPercent()); 
    if(type == 1){ 
     temp.setOwnerId(found.getOwnerId()); 
     temp.setOwnerType(found.getType()); 
     tempDao.addTemp(temp); 
     return true; 
    } 
    else{ 
     tempDao.addTemp(temp); 
     return false; 
    } 
} 

ofcourse c'est un haricot annotée avec le composant

et voici la méthode d'addition de mon dao qui ne fonctionne pas

public booléen addTemp (entité TempData) { try { getSession(). Save (entité); renvoyer true; } catch (Exception e) { e.printStackTrace(); return false; }}

et ceci est mon entité

@component public class TempData {

private int tempId; 
private Date date; 
private Timestamp timestamp; 
private String name; 
private String ownerType; 
private Integer ownerId; 
private String symbol; 
private Integer comId; 
private Double percent; 

public int getTempId() { 
    return tempId; 
} 

public void setTempId(int tempId) { 
    this.tempId = tempId; 
} 

public Date getDate() { 
    return date; 
} 

public void setDate(Date date) { 
    this.date = date; 
} 

public Timestamp getTimestamp() { 
    return timestamp; 
} 

public void setTimestamp(Timestamp timestamp) { 
    this.timestamp = timestamp; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getOwnerType() { 
    return ownerType; 
} 

public void setOwnerType(String ownerType) { 
    this.ownerType = ownerType; 
} 

public Integer getOwnerId() { 
    return ownerId; 
} 

public void setOwnerId(Integer ownerId) { 
    this.ownerId = ownerId; 
} 

public String getSymbol() { 
    return symbol; 
} 

public void setSymbol(String symbol) { 
    this.symbol = symbol; 
} 

public Integer getComId() { 
    return comId; 
} 

public void setComId(Integer comId) { 
    this.comId = comId; 
} 

public Double getPercent() { 
    return percent; 
} 

public void setPercent(Double percent) { 
    this.percent = percent; 
} 

et voici mon HBM

et c'est de thats partie de configuration de printemps liés

<tx:advice id="tx" transaction-manager="transactionManager"> 
    <tx:attributes> 
     <tx:method name="find*" propagation="REQUIRES_NEW"/> 
     <tx:method name="add*" propagation="REQUIRES_NEW"/> 
    </tx:attributes> 
</tx:advice> 

<aop:config> 
    <aop:advisor advice-ref="tx" pointcut="execution(* *..AbstractDao.*(..))" /> 
    <aop:advisor advice-ref="tx" pointcut="execution(* *..TempDataDao.addTemp(..))" /> 
</aop:config> 

chose est-il récupère les données parfaitement, mais en matière de sauvegarde des données, il ne fonctionne pas seulement, et les mêmes méthodes dans différents projets fonctionnent parfaitement, mais ici, ils ne le font pas et le journal ne dit rien sur une erreur ou quelque chose, j'ai même essayé de changer le nom de la table mappée à un faux un mais toujours pas d'erreurs et termine la transaction,

Qu'est-ce que je manque ici?

EDIT

C'est ce que mes spectacles de débogage, et juste que

DEBUG [http-bio-8080-exec-7] (HibernateTransactionManager.java:569) - Exposing Hibernate transaction as JDBC transaction [jdbc:mysql://localhost:3306/parse_web, [email protected], MySQL-AB JDBC Driver] 
DEBUG [http-bio-8080-exec-7] (SessionImpl.java:265) - opened session at timestamp: 13683691714 
DEBUG [http-bio-8080-exec-7] (AbstractSaveEventListener.java:134) - generated identifier: 0, using strategy: org.hibernate.id.Assigned 
DEBUG [http-bio-8080-exec-7] (AbstractPlatformTransactionManager.java:752) - Initiating transaction commit 
DEBUG [http-bio-8080-exec-7] (HibernateTransactionManager.java:652) - Committing Hibernate transaction on Session [[email protected]] 
DEBUG [http-bio-8080-exec-7] (JDBCTransaction.java:130) - commit 
DEBUG [http-bio-8080-exec-7] (JDBCTransaction.java:223) - re-enabling autocommit 
DEBUG [http-bio-8080-exec-7] (JDBCTransaction.java:143) - committed JDBC Connection 
DEBUG [http-bio-8080-exec-7] (ConnectionManager.java:325) - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources! 
DEBUG [http-bio-8080-exec-7] (HibernateTransactionManager.java:734) - Closing Hibernate Session [[email protected]] after transaction 
DEBUG [http-bio-8080-exec-7] (SessionFactoryUtils.java:789) - Closing Hibernate Session 
DEBUG [http-bio-8080-exec-7] (ConnectionManager.java:464) - releasing JDBC connection [ (open PreparedStatements: 0, globally: 0) (open ResultSets: 0, globally: 0)] 
DEBUG [http-bio-8080-exec-7] (ConnectionManager.java:325) - transaction completed on session with on_close connection release mode; be sure to close the session to release JDBC resources! 

c'est comment j'obtenir ma session

public Session getSession(){ 
     return (this.factory.getCurrentSession()==null)? 
       this.factory.getCurrentSession() : this.factory.openSession(); 
    } 
+0

Avez-vous ajouté @Transactional dans votre couche Service ou couche DAO? – user962206

+0

J'utilise la gestion de transactions basée sur xml, et comme je l'ai dit, elle le gère parce que le journal dit que la transaction a commencé et est validée et que tout est bon mais que l'enregistrement est faux – engma

+0

Je commencerais par supprimer le bloc try/catch du DAO méthode.S'il existe une exception, laissez-la se propager pour annuler la transaction et être averti de l'erreur. N'attrapez pas les exceptions que vous ne pouvez pas gérer correctement. –

Répondre

1

Le problème est probablement dû à la façon vous obtenez une session. La session que vous obtenez n'est en aucun cas liée au gestionnaire de transactions Spring, et ce que vous faites avec elle se fait en dehors de la transaction Spring. Vous devez définir une fabrique de sessions Spring dans votre contexte printanier et l'injecter dans votre DAO, comme expliqué dans the documentation.

+0

Merci, ça explique beaucoup, mais le problème n'a rien à voir avec hibernate et j'ai passé 2 jours à chercher le mauvais bug, ça explique aussi pourquoi il peut récupérer des valeurs sans les paramétrer. – engma

Questions connexes