package org.tests.idkeys; import io.ebean.BaseTestCase; import io.ebean.Transaction; import io.ebean.config.dbplatform.IdType; import io.ebeaninternal.api.SpiEbeanServer; import org.junit.Test; import org.tests.idkeys.db.GenKeyIdentity; import org.tests.idkeys.db.GenKeySequence; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import static org.junit.Assert.*; public class TestGeneratedKeys extends BaseTestCase { @Test public void testSequence() throws SQLException { SpiEbeanServer server = spiEbeanServer(); IdType idType = server.getDatabasePlatform().getDbIdentity().getIdType(); if (!IdType.SEQUENCE.equals(idType)) { // only run this test when SEQUENCE is being used return; } if (!isH2()) { // readSequenceValue is H2 specific return; } Transaction tx = server.beginTransaction(); long sequenceStart = readSequenceValue(tx, GenKeySequence.SEQUENCE_NAME); GenKeySequence al = new GenKeySequence(); al.setDescription("my description"); server.save(al); long sequenceCurrent = readSequenceValue(tx, GenKeySequence.SEQUENCE_NAME); assertNotNull(al.getId()); assertFalse(sequenceStart == sequenceCurrent); assertEquals(sequenceStart + 20, sequenceCurrent); } private long readSequenceValue(Transaction tx, String sequence) throws SQLException { Statement stm = null; try { stm = tx.getConnection().createStatement(); ResultSet rs = stm.executeQuery("select currval('" + sequence + "')"); rs.next(); return rs.getLong(1); } finally { if (stm != null) { try { stm.close(); } catch (SQLException e) { } } } } @Test public void testIdentity() throws SQLException { SpiEbeanServer server = spiEbeanServer(); IdType idType = server.getDatabasePlatform().getDbIdentity().getIdType(); if (!IdType.IDENTITY.equals(idType)) { // only run this test when SEQUENCE is being used return; } Transaction tx = server.beginTransaction(); GenKeyIdentity al = new GenKeyIdentity(); al.setDescription("my description"); server.save(al); // For JDBC batching we won't get the id until after // the batch has been flushed explicitly or via commit //assertNotNull(al.getId()); tx.commit(); assertNotNull(al.getId()); } }