Changeset 7465 for branches/3.12-stable
- Timestamp:
- Mar 28, 2018, 9:26:14 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/3.12-stable/src/core/net/sf/basedb/core/hibernate/NativeQueryWrapper.java
r7464 r7465 22 22 package net.sf.basedb.core.hibernate; 23 23 24 import java.lang.reflect.Field; 24 25 import java.util.Calendar; 25 26 import java.util.Collection; 26 27 import java.util.Date; 28 import java.util.Iterator; 27 29 import java.util.List; 28 30 import java.util.Map; … … 39 41 import org.hibernate.query.NativeQuery; 40 42 import org.hibernate.query.QueryParameter; 43 import org.hibernate.query.internal.AbstractProducedQuery; 44 import org.hibernate.query.internal.QueryParameterBindingsImpl; 45 import org.hibernate.query.spi.QueryParameterBinding; 41 46 import org.hibernate.engine.query.spi.sql.NativeSQLQueryReturn; 42 47 import org.hibernate.type.Type; … … 62 67 } 63 68 69 /** 70 Get the underlying parent query from Hibernate. 71 */ 72 public NativeQuery<R> getParentQuery() 73 { 74 return query; 75 } 76 64 77 @Override 65 78 @Deprecated … … 498 511 } 499 512 513 514 // Reference to the "QueryParameterBindingsImpl.parameterBindingMap" variable 515 private Field parameterBindingMap; 516 517 /** 518 We need to remove "synthetic" parameters from the "parameterBindingMap". 519 The parameters are created by Hibernate when a list-type parameter is 520 specified on a query: name_0, name_1, etc. The problem is that the 521 "synthetic" parameters are never cleared and if the same query is re-used 522 with a shorter list, Hibernate will try to set the non-existing parameters 523 which causes an exception. See http://base.thep.lu.se/ticket/2110 524 */ 525 @SuppressWarnings({ "unchecked", "rawtypes" }) 500 526 private void clearOldParameterListParameters(String parameterName) 501 {} 527 { 528 try 529 { 530 if (parameterBindingMap == null) 531 { 532 parameterBindingMap = QueryParameterBindingsImpl.class.getDeclaredField("parameterBindingMap"); 533 parameterBindingMap.setAccessible(true); 534 } 535 536 String prefixOfParametersToRemove = parameterName + "_"; 537 Map<QueryParameter<?>, QueryParameterBinding<?>> m = (Map)parameterBindingMap.get(((AbstractProducedQuery)query).getQueryParameterBindings()); 538 Iterator<QueryParameter<?>> i = m.keySet().iterator(); 539 while (i.hasNext()) 540 { 541 String name = i.next().getName(); 542 if (name.startsWith(prefixOfParametersToRemove)) 543 { 544 i.remove(); 545 } 546 } 547 } 548 catch (Exception ex) 549 { 550 throw new RuntimeException(ex); 551 } 552 } 502 553 }
Note: See TracChangeset
for help on using the changeset viewer.