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
