diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
index 0949935..2056e71 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLClient.java
@@ -195,10 +195,11 @@
       while (rs.next()) {
         entries.add(
             new SQLEntry(
+                databaseDialect,
                 rs.getString(PROJECT_ENTRY),
                 rs.getTimestamp(DATE_ENTRY),
                 rs.getString(EVENT_ENTRY),
-                rs.getInt(PRIMARY_ENTRY)));
+                rs.getObject(PRIMARY_ENTRY)));
       }
       return entries;
     }
@@ -211,10 +212,11 @@
       while (rs.next()) {
         SQLEntry entry =
             new SQLEntry(
+                databaseDialect,
                 rs.getString(PROJECT_ENTRY),
                 rs.getTimestamp(DATE_ENTRY),
                 rs.getString(EVENT_ENTRY),
-                rs.getInt(PRIMARY_ENTRY));
+                rs.getObject(PRIMARY_ENTRY));
         result.put(rs.getString(PROJECT_ENTRY), entry);
       }
       return result;
diff --git a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntry.java b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntry.java
index 1ae9228..38bc8bc 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntry.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntry.java
@@ -15,21 +15,27 @@
 package com.ericsson.gerrit.plugins.eventslog.sql;
 
 import java.sql.Timestamp;
+import java.util.Objects;
 
 class SQLEntry implements Comparable<SQLEntry> {
-  private static final int SEED = 31;
+  private SQLDialect dialect;
   private String name;
   private Timestamp timestamp;
   private String event;
-  private int id;
+  private Object id;
 
-  SQLEntry(String name, Timestamp timestamp, String event, int id) {
+  SQLEntry(SQLDialect dialect, String name, Timestamp timestamp, String event, Object id) {
+    this.dialect = dialect;
     this.name = name;
     this.timestamp = timestamp;
     this.event = event;
     this.id = id;
   }
 
+  public SQLDialect getDialect() {
+    return dialect;
+  }
+
   public String getName() {
     return name;
   }
@@ -44,22 +50,25 @@
 
   @Override
   public int compareTo(SQLEntry o) {
-    return Integer.compare(this.id, o.id);
+    switch (dialect) {
+      case SPANNER:
+        return timestamp.compareTo(o.timestamp);
+      default:
+        return Integer.compare((int) id, (int) o.id);
+    }
   }
 
   @Override
   public boolean equals(Object o) {
-    if (o == null) {
-      return false;
+    if (o instanceof SQLEntry) {
+      SQLEntry other = (SQLEntry) o;
+      return Objects.equals(id, other.id);
     }
-    if (this.getClass() != o.getClass()) {
-      return false;
-    }
-    return this.id == ((SQLEntry) o).id;
+    return false;
   }
 
   @Override
   public int hashCode() {
-    return SEED + id;
+    return Objects.hash(id);
   }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntryTest.java b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntryTest.java
index 3fd3217..2fe12da 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntryTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/eventslog/sql/SQLEntryTest.java
@@ -28,21 +28,38 @@
   private SQLEntry entry2;
   private SQLEntry entry3;
   private SQLEntry entry4;
+  private SQLEntry entry5;
+  private SQLEntry entry6;
+  private SQLEntry entry7;
 
   @Before
   public void setUp() {
     Timestamp timestamp = new Timestamp(NOW);
-    entry1 = new SQLEntry("name1", timestamp, "event1", Integer.MAX_VALUE);
-    entry2 = new SQLEntry("name2", timestamp, "event2", Integer.MIN_VALUE);
-    entry3 = new SQLEntry("name3", timestamp, "event3", 0);
-    entry4 = new SQLEntry("name4", timestamp, "event4", Integer.MAX_VALUE);
-  }
-
-  @Test
-  public void testHashCode() throws Exception {
-    assertThat(entry1.hashCode()).isEqualTo(-2147483618);
-    assertThat(entry2.hashCode()).isEqualTo(-2147483617);
-    assertThat(entry3.hashCode()).isEqualTo(31);
+    entry1 = new SQLEntry(SQLDialect.H2, "name1", timestamp, "event1", Integer.MAX_VALUE);
+    entry2 = new SQLEntry(SQLDialect.H2, "name2", timestamp, "event2", Integer.MIN_VALUE);
+    entry3 = new SQLEntry(SQLDialect.H2, "name3", timestamp, "event3", 0);
+    entry4 = new SQLEntry(SQLDialect.H2, "name4", timestamp, "event4", Integer.MAX_VALUE);
+    entry5 =
+        new SQLEntry(
+            SQLDialect.SPANNER,
+            "name5",
+            timestamp,
+            "event1",
+            "b54e6b86-7686-4c3e-a4e4-8edd60ae328e");
+    entry6 =
+        new SQLEntry(
+            SQLDialect.SPANNER,
+            "name6",
+            timestamp,
+            "event2",
+            "0ebc1d7f-5888-45d8-8cd1-244eda611a38");
+    entry7 =
+        new SQLEntry(
+            SQLDialect.SPANNER,
+            "name7",
+            timestamp,
+            "event2",
+            "0ebc1d7f-5888-45d8-8cd1-244eda611a38");
   }
 
   @Test
@@ -73,5 +90,8 @@
     assertThat(entry1.equals("String object")).isFalse();
     assertThat(entry1.equals(entry2)).isFalse();
     assertThat(entry1.equals(entry4)).isTrue();
+    assertThat(entry4.equals(entry5)).isFalse();
+    assertThat(entry5.equals(entry6)).isFalse();
+    assertThat(entry6.equals(entry7)).isTrue();
   }
 }
