まず、投稿する前に多くの投稿をチェックしたことを明確にします。理解できないだけかもしれませんが、解決策が投稿されました。
休止状態 3 (スプリングなし) を使用して、struts アプリ v 1.2.9 を開発しています。私の問題は、たとえばエンティティを削除してコミットすると、データベースで変更が正常であることを確認できることです。ただし、テーブルにクエリを実行すると、事前に削除したこのエンティティを取得します。
これは私の hibernate.cfg.xml の一部です
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">XXXXXXXXXXXXXXX</property>
<property name="hibernate.connection.username">X</property>
<property name="hibernate.connection.password">X</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.hbm2ddl.auto">validate</property>
org.hibernate.cache.NoCacheProvider
私のHibernateUtil(他の投稿からコピー)
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
そして私のDAO
import com.mylib.modelo.Television;
import com.mylib.plugins.HibernateUtil;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.mylib.plugins.HibernateUtil;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
public class TelevisionsDAO {
private static final Log log = LogFactory.getLog(TelevisionsDAO.class);
public Television getTelevisionById(int idTelevision){
Session session=null;
Transaction tx =null;
Television rs =null;
try{
session = HibernateUtil.getSessionFactory().getCurrentSession();
tx = session.beginTransaction();
session.flush();
//QJ: Use Hibernate Criteria for more secured functionalities
rs=(Television) session.createCriteria(Television.class)
.add(Restrictions.eq("idTelevision", idTelevision))
.uniqueResult();
if(rs!=null)session.refresh(rs);
tx.commit();
}catch(HibernateException e){
e.printStackTrace();
}
return rs;
}
public List<Television> encuentraTelevisions(Integer idUsuario){
Session session=null;
Transaction tx =null;
List rs =null;
try{
session = HibernateUtil.getSessionFactory().getCurrentSession();
tx = session.beginTransaction();
//QJ: Use Hibernate Criteria for more secured functionalities
rs=(List)session.createCriteria(Television.class)
.add(Restrictions.eq("usuario.idUsuario", idUsuario))
.list();
}catch(HibernateException e){
e.printStackTrace();
}
return rs;
}
public List<Television> encuentraTelevisions(Integer idUsuario, Boolean buscaOfrece){
Session session=null;
Transaction tx =null;
List rs =null;
try{
session = HibernateUtil.getSessionFactory().getCurrentSession();
tx = session.beginTransaction();
//QJ: Use Hibernate Criteria for more secured functionalities
rs=(List)session.createCriteria(Television.class)
.add(Restrictions.eq("usuario.idUsuario", idUsuario))
.add(Restrictions.eq("buscaOfrece", buscaOfrece))
.list();
// for(int i=0;i<rs.size();i++){
// session.refresh((Television)rs.get(i));
// }
tx.commit();
}catch(HibernateException e){
e.printStackTrace();
}
return rs;
}
public boolean hasTelevision(Integer idUsuario, Boolean buscaOfrece,
Integer idConocimiento){
Session session=null;
Transaction tx =null;
List rs =null;
try{
session = HibernateUtil.getSessionFactory().getCurrentSession();
tx = session.beginTransaction();
//session.flush();
//QJ: Use Hibernate Criteria for more secured functionalities
rs=(List)session.createCriteria(Television.class)
.add(Restrictions.eq("usuario.idUsuario", idUsuario))
.add(Restrictions.eq("buscaOfrece", buscaOfrece))
.add(Restrictions.eq("conocimiento.idConocimiento", idConocimiento))
.list();
tx.commit();
}catch(HibernateException e){
e.printStackTrace();
}
return rs.size()>0;
}
public Integer addTelevision(Television television) throws Exception {
log.info("addTelevision");
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
try {
Integer p = (Integer) session.save(television);
session.flush();
session.refresh(television);
tx.commit();
log.info("end addTelevision");
return p;
} catch (HibernateException e) {
log.error("addTelevision", e);
tx.rollback();
throw e;
}
}
public void quitarTelevision(Television television) throws Exception {
log.info("quitarTelevision");
Session session= HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
try {
session.delete(television);
session.flush();
//session.refresh(television);
tx.commit();
} catch (HibernateException e) {
log.error("quitarTelevision", e);
tx.rollback();
throw e;
}
}
テレビBLで:
public Integer addTelevision(Usuario usuario, Integer idConocimiento, boolean buscaOfrece)throws Exception{
//compruebo que el usuario no contiene la telerencia en cuestión
if(!televisionDAO.hasTelevision(
usuario.getIdUsuario(), buscaOfrece, idConocimiento)){
Television tel = new Television();
tel.setBuscaOfrece(buscaOfrece);
tel.setUsuario(usuario);
tel.setConocimiento(new Conocimiento(idConocimiento));
return telerenciasDAO.addTelevision(tel);
}else{
return -1;
}
}
public boolean quitarTelevisionSafe(Integer idTelevision, Integer idUsuarioRequesting) throws Exception{
Television television = televisionsDAO.getTelevisionById(idTelevision.intValue());
if( television.getUsuario().getIdUsuario().intValue() == idUsuarioRequesting.intValue() ){
televisionsDAO.quitarTelevision(television);
return true;
}else{
return false;
}
}