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();
}
Avez-vous ajouté @Transactional dans votre couche Service ou couche DAO? – user962206
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
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. –