Changeset 5037
- Timestamp:
- Jul 31, 2009, 9:20:53 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/core/net/sf/basedb/core/HibernateUtil.java
r4889 r5037 61 61 import java.sql.DatabaseMetaData; 62 62 import java.sql.SQLException; 63 import java.lang.reflect.Field; 63 64 import java.net.URL; 64 65 import java.net.URI; … … 94 95 import org.hibernate.tool.hbm2ddl.SchemaExport; 95 96 import org.hibernate.tool.hbm2ddl.SchemaUpdate; 97 import org.hibernate.util.SoftLimitMRUCache; 96 98 import org.hibernate.metadata.ClassMetadata; 97 99 import org.hibernate.dialect.Dialect; … … 99 101 import org.hibernate.dialect.function.SQLFunctionTemplate; 100 102 import org.hibernate.engine.Mapping; 103 import org.hibernate.engine.query.QueryPlanCache; 104 import org.hibernate.impl.SessionFactoryImpl; 101 105 102 106 /** … … 199 203 cfg.configure(); 200 204 sf = cfg.buildSessionFactory(); 205 /* 206 ========================================================= 207 VERY UGLY hack to solve a bug in Hibernate. See 208 http://opensource.atlassian.com/projects/hibernate/browse/HHH-4065 209 The hack replaces an internal query cache in Hibernate 210 with an implementation that simply ignores everything that 211 Hibernate tries to put in it. This code should be removed 212 as soon as Hibernate has released an update that fixes the 213 issue. 214 ========================================================= 215 */ 216 try 217 { 218 SessionFactoryImpl sfi = (SessionFactoryImpl)sf; 219 QueryPlanCache qpc = sfi.getQueryPlanCache(); 220 Field pcf = QueryPlanCache.class.getDeclaredField("planCache"); 221 pcf.setAccessible(true); 222 pcf.set(qpc, 223 new SoftLimitMRUCache() 224 { 225 private static final long serialVersionUID = -7082205080525320488L; 226 @Override 227 public Object put(Object key, Object value) 228 { 229 return null; 230 } 231 } 232 ); 233 } 234 catch (Exception ex) 235 { 236 log.warn("Could not replace query plan cache in Hibernate", ex); 237 } 238 // ========================================================= 239 201 240 } 202 241 catch (HibernateException ex) … … 1783 1822 news = HibernateUtil.loadData(session, NewsData.class, newsId); 1784 1823 ok = news == null; 1824 /* 1825 =============================================== 1826 Code used to test the bug described in #init2() 1827 =============================================== 1828 System.out.println("Selecting news 1:"); 1829 session = HibernateUtil.newSession(); 1830 String hql = "SELECT n FROM NewsData n"; 1831 Filter f = session.enableFilter("memberOf"); 1832 List<Integer> idList = new ArrayList<Integer>(); 1833 idList.add(1); 1834 f.setParameterList("items", idList); 1835 f.setParameter("owner", 0); 1836 Query q = session.createQuery(hql); 1837 System.out.println(q.list()); 1838 session.close(); 1839 1840 System.out.println("Selecting news 1+2:"); 1841 session = HibernateUtil.newSession(); 1842 f = session.enableFilter("memberOf"); 1843 idList.add(2); 1844 f.setParameterList("items", idList); 1845 f.setParameter("owner", 0); 1846 System.out.println("creating query"); 1847 q = session.createQuery(hql); 1848 System.out.println("query created"); 1849 System.out.println(q.list()); 1850 session.close(); 1851 */ 1852 1785 1853 } 1786 1854 finally
Note: See TracChangeset
for help on using the changeset viewer.