Author: bdaw
Date: 2009-11-11 17:03:01 -0500 (Wed, 11 Nov 2009)
New Revision: 926
Modified:
idm/trunk/idm-hibernate/src/main/java/org/jboss/identity/idm/impl/store/hibernate/HibernateIdentityStoreImpl.java
Log:
- better implementation of findIdentityObjectByUniqueAttribute()
Modified:
idm/trunk/idm-hibernate/src/main/java/org/jboss/identity/idm/impl/store/hibernate/HibernateIdentityStoreImpl.java
===================================================================
---
idm/trunk/idm-hibernate/src/main/java/org/jboss/identity/idm/impl/store/hibernate/HibernateIdentityStoreImpl.java 2009-11-11
20:46:11 UTC (rev 925)
+++
idm/trunk/idm-hibernate/src/main/java/org/jboss/identity/idm/impl/store/hibernate/HibernateIdentityStoreImpl.java 2009-11-11
22:03:01 UTC (rev 926)
@@ -2034,17 +2034,60 @@
Session session = getHibernateSession(invocationCtx);
- Query q = session.createQuery("select a from HibernateIdentityObjectAttribute
a where a.identityObject.identityType = :identityType " +
- "and a.name = :attributeName and :value = any
elements(a.textValues)");
- Set attrValues = new HashSet();
- attrValues.addAll(attribute.getValues());
- List<HibernateIdentityObjectAttribute> attrs =
(List<HibernateIdentityObjectAttribute>)
- q.setParameter("identityType", hiot)
- .setParameter("attributeName", attrMappedName)
- .setParameter("value", attribute.getValue()).list();
+ if (attribute.getValues() == null || attribute.getValues().size() == 0)
+ {
+ return null;
+ }
+ boolean attrDuctTypeText = true;
+
+ if (attribute.getValue() instanceof byte[])
+ {
+ attrDuctTypeText = false;
+ }
+
+ StringBuffer queryString = new StringBuffer("select a from
HibernateIdentityObjectAttribute a where a.identityObject.identityType = :identityType
" +
+ "and a.name = :attributeName");
+
+ if (attrDuctTypeText)
+ {
+ for (int i = 0; i < attribute.getValues().size(); i++)
+ {
+ String paramName = " :value" + i;
+ queryString.append(" and").append(paramName).append(" = any
elements(a.textValues)");
+
+ }
+ }
+ else
+ {
+ queryString.append(" and :value = a.binaryValue");
+ }
+
+
+ Query q = session.createQuery(queryString.toString());
+ q.setParameter("identityType", hiot)
+ .setParameter("attributeName", attrMappedName);
+
+ if (attrDuctTypeText)
+ {
+ int i = 0;
+ for (Object o : attribute.getValues())
+ {
+ String value = o.toString();
+ String paramName = "value" + i;
+ q.setParameter(paramName, value);
+ i++;
+ }
+ }
+ else
+ {
+ q.setParameter("value", attribute.getValue());
+ }
+
+ List<HibernateIdentityObjectAttribute> attrs =
(List<HibernateIdentityObjectAttribute>)q.list();
+
if (attrs.size() == 0)
{
return null;
Show replies by date