Author: sshyrkov
Date: Fri Oct  5 14:36:28 2007
New Revision: 18761

URL: https://svndev.jahia.net/websvn/listing.php?sc=3D1&rev=3D18761&repname=
=3Djahia
Log:
JAHIA-2309: Unable to delete a virtual site due to DB constraint violation =

http://www.jahia.net/jira/browse/JAHIA-2309
Resolution:
1) cascade=3D"delete" added for JahiaAcl.entries mapping to properly delete=
 the child entries
2) Fetching using join is used for getting JahiaAcl with entries in one sel=
ect

Modified:
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Abst=
ractGeneratorDAO.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Jahi=
aAclDAO.java
    branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/model/Ja=
hiaAcl.java

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/da=
o/AbstractGeneratorDAO.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/hibernate/dao/AbstractGeneratorDAO.java&rev=
=3D18761&repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Abst=
ractGeneratorDAO.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Abst=
ractGeneratorDAO.java Fri Oct  5 14:36:28 2007
@@ -16,6 +16,15 @@
  * limitations under the License.
  */package org.jahia.hibernate.dao;
 =

+import java.util.List;
+
+import org.hibernate.Criteria;
+import org.hibernate.HibernateException;
+import org.hibernate.Session;
+import org.hibernate.criterion.DetachedCriteria;
+import org.springframework.orm.hibernate3.HibernateCallback;
+import org.springframework.orm.hibernate3.HibernateTemplate;
+import org.springframework.orm.hibernate3.SessionFactoryUtils;
 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
 =

 /**
@@ -71,4 +80,34 @@
         }
     }
 =

+    protected List findByCriteria(final HibernateTemplate template,
+            final DetachedCriteria detachedCriteria) {
+        return (List) findByCriteria(template, detachedCriteria, false);
+    }
+
+    protected Object findByCriteriaUnique(final HibernateTemplate template,
+            final DetachedCriteria detachedCriteria) {
+        return findByCriteria(template, detachedCriteria, true);
+    }
+
+    private Object findByCriteria(final HibernateTemplate template,
+            final DetachedCriteria detachedCriteria, final boolean uniqueR=
esult) {
+        return template.execute(new HibernateCallback() {
+            public Object doInHibernate(Session session)
+                    throws HibernateException {
+                Criteria criteria =3D detachedCriteria
+                        .getExecutableCriteria(session);
+                if (template.isCacheQueries()) {
+                    criteria.setCacheable(true);
+                    if (template.getQueryCacheRegion() !=3D null) {
+                        criteria.setCacheRegion(template.getQueryCacheRegi=
on());
+                    }
+                }
+                SessionFactoryUtils.applyTransactionTimeout(criteria,
+                        getSessionFactory());
+                return uniqueResult ? criteria.uniqueResult() : criteria.l=
ist();
+            }
+        }, true);
+    }
+
 }

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/da=
o/JahiaAclDAO.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/hibernate/dao/JahiaAclDAO.java&rev=3D18761&=
repname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Jahi=
aAclDAO.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/dao/Jahi=
aAclDAO.java Fri Oct  5 14:36:28 2007
@@ -19,54 +19,50 @@
  */
 package org.jahia.hibernate.dao;
 =

+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.hibernate.FetchMode;
 import org.hibernate.HibernateException;
+import org.hibernate.criterion.DetachedCriteria;
+import org.hibernate.criterion.Restrictions;
 import org.jahia.hibernate.model.JahiaAcl;
 import org.jahia.hibernate.model.JahiaAclEntry;
 import org.jahia.services.acl.ACLInfo;
 import org.springframework.orm.ObjectRetrievalFailureException;
 import org.springframework.orm.hibernate3.HibernateTemplate;
 =

-import java.util.*;
-
 /**
- * Created by IntelliJ IDEA.
- * User: Rincevent
- * Date: 27 d=C3=83=C2=A9c. 2004
- * Time: 12:25:44
- * To change this template use File | Settings | File Templates.
+ * DAO service for managing Jahia ACL entries.
+ * =

+ * @author Rincevent
  */
 public class JahiaAclDAO extends AbstractGeneratorDAO {
-// --------------------- GETTER / SETTER METHODS ---------------------
     private Log log =3D LogFactory.getLog(JahiaAclDAO.class);
 =

     public List getAcls() {
-        String hql =3D "from JahiaAcl";
-        List retval =3D null;
         final HibernateTemplate template =3D getHibernateTemplate();
         template.setCacheQueries(true);
         template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
-        retval =3D template.find(hql);
-        for (int i =3D 0; i < retval.size(); i++) {
-            JahiaAcl acl =3D (JahiaAcl) retval.get(i);
-            acl.getEntries().isEmpty();
-        }
-        return retval;
+        return findByCriteria(template, DetachedCriteria.forClass(
+                JahiaAcl.class).setFetchMode("entries", FetchMode.JOIN));
     }
 =

-// -------------------------- OTHER METHODS --------------------------
-
     public JahiaAcl findAclById(Integer id) {
         JahiaAcl acl =3D null;
         if (id !=3D null) {
             final HibernateTemplate template =3D getHibernateTemplate();
             template.setCacheQueries(true);
             template.setFlushMode(HibernateTemplate.FLUSH_NEVER);
-            acl =3D (JahiaAcl) template.get(JahiaAcl.class, id);
-            if (acl!=3Dnull) {
-                acl.getEntries().isEmpty();
-            } else {
+            acl =3D (JahiaAcl) findByCriteriaUnique(template, DetachedCrit=
eria
+                    .forClass(JahiaAcl.class).add(Restrictions.idEq(id))
+                    .setFetchMode("entries", FetchMode.JOIN));
+            if (acl =3D=3D null) {
                 throw new ObjectRetrievalFailureException(JahiaAcl.class, =
id);
             }
         }
@@ -88,22 +84,19 @@
     }
 =

     public void removeAcl(Integer id) {
-        JahiaAcl acl =3D findAclById(id);
-        final HibernateTemplate hibernateTemplate =3D getHibernateTemplate=
();
-        hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_AUTO);
-        final Map userEntries =3D acl.getUserEntries();
-        if (userEntries !=3D null) {
-            hibernateTemplate.deleteAll(userEntries.values());
-            acl.setUserEntries(new HashMap());
-        }
-        final Map groupEntries =3D acl.getGroupEntries();
-        if (groupEntries !=3D null) {
-            hibernateTemplate.deleteAll(groupEntries.values());
-            acl.setGroupEntries(new HashMap());
+        JahiaAcl acl =3D null;
+        try {
+            acl =3D findAclById(id);            =

+        } catch (ObjectRetrievalFailureException e) {
+            logger.info("ACL with ID: " + id + " not found. Skipping delet=
ing.");
+        }
+        if (acl !=3D null) {
+            final HibernateTemplate hibernateTemplate =3D getHibernateTemp=
late();
+            hibernateTemplate.setFlushMode(HibernateTemplate.FLUSH_AUTO);
+            hibernateTemplate.deleteAll(hibernateTemplate.find("from Jahia=
Acl a where a.parentId=3D?",id));
+            hibernateTemplate.delete(acl);
+            hibernateTemplate.flush();
         }
-        hibernateTemplate.deleteAll(hibernateTemplate.find("from JahiaAcl =
a where a.parentId=3D?",id));
-        hibernateTemplate.delete(acl);
-        hibernateTemplate.flush();
     }
 =

     public void removeGroupAclEntries(String name) {
@@ -177,19 +170,7 @@
     private void saveOrUpdateEntry(final Map userEntries, String key, Hibe=
rnateTemplate hibernateTemplate)
             throws HibernateException {
         JahiaAclEntry jahiaAclEntry =3D (JahiaAclEntry) userEntries.get(ke=
y);
-//        try {
-//            JahiaAclEntry entry =3D (JahiaAclEntry) hibernateTemplate.ge=
t(JahiaAclEntry.class,
-//                                                                        =
 jahiaAclEntry.getComp_id());
-//            if(entry !=3Dnull) {
-//                entry.setEntryState(jahiaAclEntry.getEntryState());
-//                entry.setEntryTri(jahiaAclEntry.getEntryTri());
-//                hibernateTemplate.update(entry);
-//            } else {
-                hibernateTemplate.save(jahiaAclEntry);
-//            }
-//        } catch (ObjectNotFoundException e) {
-//            hibernateTemplate.save(jahiaAclEntry);
-//        }
+        hibernateTemplate.save(jahiaAclEntry);
     }
 =

     private void updateEntries(JahiaAcl acl, HibernateTemplate hibernateTe=
mplate) throws HibernateException {
@@ -214,5 +195,4 @@
             }
         }
     }
-}
-
+}
\ No newline at end of file

Modified: branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/mo=
del/JahiaAcl.java
URL: https://svndev.jahia.net/websvn/diff.php?path=3D/branches/JAHIA-5-0-SP=
-BRANCH/core/src/java/org/jahia/hibernate/model/JahiaAcl.java&rev=3D18761&r=
epname=3Djahia
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/model/Ja=
hiaAcl.java (original)
+++ branches/JAHIA-5-0-SP-BRANCH/core/src/java/org/jahia/hibernate/model/Ja=
hiaAcl.java Fri Oct  5 14:36:28 2007
@@ -91,7 +91,7 @@
     /**
      * @hibernate.map lazy=3D"true"
      * inverse=3D"true"
-     * cascade=3D"none"
+     * cascade=3D"delete"
      * @hibernate.collection-key column=3D"id_jahia_acl"
      * @hibernate.collection-one-to-many class=3D"org.jahia.hibernate.mode=
l.JahiaAclEntry"
      * @hibernate.collection-index column=3D"target_jahia_acl_entries" typ=
e=3D"string"
@@ -198,7 +198,6 @@
 =

     private transient JahiaAcl parent;
     private transient JahiaAcl pickedAcl;
-    private transient JahiaAcl rootPickedAcl;
 =

     private Integer parentId;
     private Integer pickedAclId;

_______________________________________________
cvs_list mailing list
[email protected]
http://lists.jahia.org/cgi-bin/mailman/listinfo/cvs_list

Reply via email to