<style>
/* Changing the layout to use less space for mobiles */
@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
    #email-body { min-width: 30em !important; }
    #email-page { padding: 8px !important; }
    #email-banner { padding: 8px 8px 0 8px !important; }
    #email-avatar { margin: 1px 8px 8px 0 !important; padding: 0 !important; }
    #email-fields { padding: 0 8px 8px 8px !important; }
    #email-gutter { width: 0 !important; }
}
</style>
<div id="email-body">
<table id="email-wrap" align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#f0f0f0;color:#000000;width:100%;">
    <tr valign="top">
        <td id="email-page" style="padding:16px !important;">
            <table align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#ffffff;border:1px solid #bbbbbb;color:#000000;width:100%;">
                <tr valign="top">
                    <td bgcolor="#3e4c4e" style="background-color:#3e4c4e;color:#ffffff;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;line-height:1;"><img src="https://www.jboss.org/dms/hibernate/images/jira/jiraheader_hibernate.png" alt="" style="vertical-align:top;" /></td>
                </tr><tr valign="top">
    <td id="email-banner" style="padding:32px 32px 0 32px;">
        
                
        
        
            <table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="width:100%;">
    <tr valign="top">
        <td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;padding:0;">
                                        <img id="email-avatar" src="https://hibernate.onjira.com/secure/useravatar?avatarId=10162" alt="" height="48" width="48" border="0" align="left" style="padding:0;margin: 0 16px 16px 0;" />
                        <div id="email-action" style="padding: 0 0 8px 0;font-size:12px;line-height:18px;">
                                    <a class="user-hover" rel="jhopkins" id="email_jhopkins" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=jhopkins" style="color:#6c797f;">Joe Hopkins</a>
     created <img src="https://hibernate.onjira.com/images/icons/bug.gif" height="16" width="16" border="0" align="absmiddle" alt="Bug"> <a style='color:#6c797f;text-decoration:none;' href='https://hibernate.onjira.com/browse/HSHARDS-64'>HSHARDS-64</a>
            </div>
                        <div id="email-summary" style="font-size:16px;line-height:20px;padding:2px 0 16px 0;">
                <a style='color:#6c797f;text-decoration:none;' href='https://hibernate.onjira.com/browse/HSHARDS-64'><strong>Bug in method getShardIdForObject of ShardedSessionImpl</strong></a>
            </div>
                    </td>
    </tr>
</table>
    </td>
</tr>
<tr valign="top">
    <td id="email-fields" style="padding:0 32px 32px 32px;">
        <table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">
            <tr valign="top">
                <td id="email-gutter" style="width:64px;white-space:nowrap;"></td>
                <td>
                    <table border="0" cellpadding="0" cellspacing="0" width="100%">
                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Issue Type:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                <img src="https://hibernate.onjira.com/images/icons/bug.gif" height="16" width="16" border="0" align="absmiddle" alt="Bug">        Bug
    </td>
</tr>                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Affects Versions:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                    3.0.0.Beta2            </td>
</tr>
                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Assignee:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                                        <a class="user-hover" rel="max.ross" id="email_max.ross" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=max.ross" style="color:#6c797f;">Max Ross</a>
                </td>
</tr>                                                <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Components:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                    engine            </td>
</tr>
                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Created:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
        14/Nov/12 10:36 AM
    </td>
</tr>                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Description:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
        <p style='margin-top:0;margin-bottom:10px;'>This method seems to incorrectly throw an exception if your not using the ShardEncodingIdentifierGenerator to generate ID's for your entities.  In my project the Shard ID's are created externally by a NoSql database system and then the data is shard into MySQL for long term storage.  All works good when saving the object first time (new) but when trying to update, merge, saveOrUpdate it throws the exception "HibernateException("Can not use virtual sharding with non-shard resolving id gen")" below.</p>

<p style='margin-top:0;margin-bottom:10px;'>&lt;code&gt;<br/>
public ShardId getShardIdForObject(Object obj, List&lt;Shard&gt; shardsToConsider) {<br/>
 1503       // TODO(maxr)<br/>
 1504       // Also, wouldn't it be faster to first see if there's just a single shard<br/>
 1505       // id mapped to the shard?<br/>
 1506       Shard shard = getShardForObject(obj, shardsToConsider);<br/>
 1507       if(shard == null) {
 1508         return null;
 1509       } else if (shard.getShardIds().size() == 1) {
 1510         return shard.getShardIds().iterator().next();
 1511       } else {<br/>
 1512         String className;<br/>
 1513         if (obj instanceof HibernateProxy) {
 1514           className = ((HibernateProxy)obj).getHibernateLazyInitializer().getPersistentClass().getName();
 1515         } else {
 1516           className = obj.getClass().getName();
 1517         }<br/>
 1518         IdentifierGenerator idGenerator = shard.getSessionFactoryImplementor().getIdentifierGenerator(className);<br/>
 1519         if (idGenerator instanceof ShardEncodingIdentifierGenerator) {
 1520           return ((ShardEncodingIdentifierGenerator)idGenerator).extractShardId(getIdentifier(obj));
 1521         } else {
 1522           // TODO(tomislav): also use shard resolution strategy if it returns only 1 shard; throw this error in config instead of here
 1523           throw new HibernateException("Can not use virtual sharding with non-shard resolving id gen");
 1524         }<br/>
 1525       }<br/>
 1526     }<br/>
&lt;/code&gt;</p>

<p style='margin-top:0;margin-bottom:10px;'>The fix which I have implemented in my own version of Hibernate Shards. is to change as below.  I just return the first shard found in the list because we really don't care which shard the data is on we just need one/any to satisfy our operation or query.  In my code I shard on the key and always end up with just one shardId returned from the selectShardIdsFromShardResolutionStrategyData method.</p>

<p style='margin-top:0;margin-bottom:10px;'>&lt;code&gt;<br/>
  public ShardId getShardIdForObject(Object obj, List&lt;Shard&gt; shardsToConsider) {<br/>
    // TODO(maxr) optimize this by keeping an identity map of objects to shardId<br/>
    Shard shard = getShardForObject(obj, shardsToConsider);<br/>
    if(shard == null) {
      return null;
    } else if (shard.getShardIds().size() == 1) {
      return shard.getShardIds().iterator().next();
    } else {<br/>
      String className;<br/>
      if (obj instanceof HibernateProxy) {
        className = ((HibernateProxy)obj).getHibernateLazyInitializer().getPersistentClass().getName();
      } else {
        className = obj.getClass().getName();
      }<br/>
      IdentifierGenerator idGenerator = shard.getSessionFactoryImplementor().getIdentifierGenerator(className);<br/>
      if (idGenerator instanceof ShardEncodingIdentifierGenerator) {
        return ((ShardEncodingIdentifierGenerator)idGenerator).extractShardId(getIdentifier(obj));
      } else {<br/>
        List&lt;ShardId&gt; shardIds = selectShardIdsFromShardResolutionStrategyData(new<br/>
                                      ShardResolutionStrategyDataImpl(obj.getClass(), getIdentifier(obj)));<br/>
        if (shardIds!=null &amp;&amp; shardIds.size() &gt; 0) {
          return shardIds.get(0);
        }<br/>
        throw new HibernateException("Can not resolve shard id using virtual sharding");<br/>
      }<br/>
    }<br/>
  }<br/>
&lt;/code&gt;</p>
    </td>
</tr>
                                                <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Environment:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
        MySQL, hibernate 3.2, Java, unix
    </td>
</tr>
                                                <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Project:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
        <a style="color:#6c797f;" href="https://hibernate.onjira.com/browse/HSHARDS">Hibernate Shards</a>
    </td>
</tr>                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Labels:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                    hibernate
                    query
                    HQL
            </td>
</tr>
                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Priority:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                <img src="https://hibernate.onjira.com/images/icons/priority_major.gif" height="16" width="16" border="0" align="absmiddle" alt="Major">        Major
    </td>
</tr>                        <tr valign="top">
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
        <strong style="font-weight:normal;color:#505050;">Reporter:</strong>
    </td>
    <td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
                                        <a class="user-hover" rel="jhopkins" id="email_jhopkins" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=jhopkins" style="color:#6c797f;">Joe Hopkins</a>
                </td>
</tr>                                                    
    
    
                        </table>
                </td>
            </tr>
        </table>
    </td>
</tr>













            </table>
        </td><!-- End #email-page -->
    </tr>
    <tr valign="top">
        <td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:10px;line-height:14px;padding: 0 16px 16px 16px;text-align:center;">
            This message is automatically generated by JIRA.<br />
            If you think it was sent incorrectly, please contact your JIRA administrators<br />
            For more information on JIRA, see: <a style='color:#6c797f;' href='http://www.atlassian.com/software/jira'>http://www.atlassian.com/software/jira</a>
        </td>
    </tr>
</table><!-- End #email-wrap -->
</div><!-- End #email-body -->