title: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.xxx"; SQL statement
body: <p>I keep getting the following error message whenever my application boots up:</p>
  
  <pre><code>Caused by: org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "PRIMARY KEY ON PUBLIC.SERMON_SESSION(ID)"; SQL statement:
  INSERT INTO SERMON_SESSION (id, session_enum) VALUES ('1', 'SUN_MRN'), ('2', 'SUN_EVE'), ('3', 'TUE_BIB'), ('4', 'FRI_BIB'), ('5', 'WKD_CNF') [23505-197]
  </code></pre>
  
  <p>How can I fix this? I have to assign the sermon session id myself as it is used in later columns.</p>
  
  <p><strong>application.properties</strong></p>
  
  <pre><code>spring.h2.console.enabled=true
  spring.h2.console.path=/h2
  spring.datasource.url=jdbc:h2:mem:erc;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
  spring.datasource.driver-class-name=org.h2.Driver
  spring.datasource.username=sa
  spring.datasource.password=
  spring.datasource.initialization-mode=embedded
  spring.jpa.properties.hibernate.hbm2ddl.import_files=classpath://resources/data.sql
  spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
  spring.jpa.show-sql=false
  spring.jpa.hibernate.ddl-auto=create-drop
  spring.jpa.properties.hibernate.hbm2ddl.import_files_sql_extractor=org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor
  logging.level.com.erc.api.*=DEBUG
  logging.level.org.hibernate=OFF
  logging.level.org.hibernate.SQL=INFO
  logging.level.org.hibernate.type.descriptor.sql=INFO
  logging.level.org.jaudiotagger=WARN
  spring.servlet.multipart.max-file-size=60MB
  spring.servlet.multipart.max-request-size=60MB
  application.sermon_path=classpath://resources/files/sermons/}
  </code></pre>
  
  <p><strong>SermonSession.java</strong></p>
  
  <pre><code>@Table(name = "sermon_session", uniqueConstraints = @UniqueConstraint(columnNames = {"id", "sessionEnum"}))
  @Entity
  public class SermonSession {
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(updatable = false, nullable = false, unique = true)
      private int id;
      @Enumerated(EnumType.STRING)
      @Column(unique = true)
      private SessionEnum sessionEnum;
  
      public SermonSession(String session) {
          setSessionEnum(session);
      }
  
      public SermonSession() {
          this.sessionEnum = null;
      }
  
      public String toString() {
          return String.format("{ id: %d, session_enum: %s }", getId(), getSessionEnum());
      }
  
      String getSessionEnum() {
          return this.sessionEnum.getSession();
      }
  
      private void setSessionEnum(String session) {
          this.sessionEnum = SessionEnum.fromSession(session);
      }
  
      private int getId() {
          return id;
      }
  
      public void setId(int id) {
          this.id = id;
      }
  }
  </code></pre>
  
  <p><strong>data.sql</strong></p>
  
  <pre><code>INSERT INTO SERMON_SESSION (id, session_enum)
  VALUES ('1', 'SUN_MRN'),
         ('2', 'SUN_EVE'),
         ('3', 'TUE_BIB'),
         ('4', 'FRI_BIB'),
         ('5', 'WKD_CNF');
  </code></pre>
  
  <p>Changing data.sql to:</p>
  
  <pre><code>INSERT INTO SERMON_SESSION (session_enum)
  VALUES ('SUN_MRN'),
         ('SUN_EVE'),
         ('TUE_BIB'),
         ('FRI_BIB'),
         ('WKD_CNF');
  </code></pre>
  
  <p>Produces the following error message:</p>
  
  <pre><code>Caused by: org.h2.jdbc.JdbcSQLException: Unique index or primary key violation: "UK_AA7KWY8HO9GLHF1VI4HDB61X8_INDEX_8 ON PUBLIC.SERMON_SESSION(SESSION_ENUM) VALUES ('SUN_MRN', 1)"; SQL statement:
  INSERT INTO SERMON_SESSION (session_enum) VALUES ('SUN_MRN'), ('SUN_EVE'), ('TUE_BIB'), ('FRI_BIB'), ('WKD_CNF') [23505-197]
  </code></pre>