From 4219eea9f1d587b034ff030ccaaf4d0618bd30ff Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 14 May 2022 17:44:33 +0200
Subject: [PATCH] #663 - fixed sequences reset

---
 .../databasemigrator/BatchConfiguration.java  | 50 +++++++++----------
 .../databasemigrator/CustomIdGenerator.java   | 29 +++++++++++
 .../account/DestinationAccount.java           |  9 ++--
 .../category/DestinationCategory.java         |  9 ++--
 .../destination/chart/DestinationChart.java   |  9 ++--
 .../destination/hint/DestinationHint.java     |  9 ++--
 .../destination/icon/DestinationIcon.java     |  9 ++--
 .../destination/image/DestinationImage.java   |  4 ++
 .../repeating/DestinationRepeatingOption.java |  9 ++--
 .../end/DestinationRepeatingEnd.java          |  9 ++--
 .../DestinationRepeatingEndAfterXTimes.java   |  5 ++
 .../end/DestinationRepeatingEndDate.java      |  9 ++--
 .../end/DestinationRepeatingEndNever.java     |  5 ++
 .../DestinationRepeatingModifier.java         |  9 ++--
 .../DestinationRepeatingModifierDays.java     |  5 ++
 .../DestinationRepeatingModifierMonths.java   |  5 ++
 .../DestinationRepeatingModifierYears.java    |  5 ++
 .../report/DestinationReportColumn.java       |  9 ++--
 .../report/DestinationReportSettings.java     |  9 ++--
 .../settings/DestinationSettings.java         |  9 ++--
 .../destination/tag/DestinationTag.java       |  5 ++
 .../tag/DestinationTemplateTag.java           |  9 ++--
 .../tag/DestinationTransactionTag.java        |  9 ++--
 .../template/DestinationTemplate.java         |  9 ++--
 .../DestinationTemplateGroup.java             |  5 ++
 .../transaction/DestinationTransaction.java   |  9 ++--
 .../destination/user/DestinationUser.java     |  9 ++--
 .../listener/GenericStepListener.java         | 22 +++++---
 28 files changed, 193 insertions(+), 100 deletions(-)
 create mode 100644 BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/CustomIdGenerator.java

diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java
index d105512bc..6e1acdf7e 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/BatchConfiguration.java
@@ -241,7 +241,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationImageRepository))
 				.listener(new GenericChunkListener(TableNames.IMAGE))
-				.listener(new GenericStepListener<>(TableNames.IMAGE, destinationImageRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.IMAGE, destinationImageRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -255,7 +255,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationIconRepository))
 				.listener(new GenericChunkListener(TableNames.ICON))
-				.listener(new GenericStepListener<>(TableNames.ICON, destinationIconRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.ICON, destinationIconRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -269,7 +269,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationCategoryRepository))
 				.listener(new GenericChunkListener(TableNames.CATEGORY))
-				.listener(new GenericStepListener<>(TableNames.CATEGORY, destinationCategoryRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.CATEGORY, destinationCategoryRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -283,7 +283,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationAccountRepository))
 				.listener(new GenericChunkListener(TableNames.ACCOUNT))
-				.listener(new GenericStepListener<>(TableNames.ACCOUNT, destinationAccountRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.ACCOUNT, destinationAccountRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -297,7 +297,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationChartRepository))
 				.listener(new GenericChunkListener(TableNames.CHART))
-				.listener(new GenericStepListener<>(TableNames.CHART, destinationChartRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.CHART, destinationChartRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), false))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -311,7 +311,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationHintRepository))
 				.listener(new GenericChunkListener(TableNames.HINT))
-				.listener(new GenericStepListener<>(TableNames.HINT, destinationHintRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.HINT, destinationHintRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -325,7 +325,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingEndRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_END))
-				.listener(new GenericStepListener<>(TableNames.REPEATING_END, destinationRepeatingEndRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPEATING_END, destinationRepeatingEndRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -339,7 +339,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingEndAfterXTimesRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_END_AFTER_X_TIMES))
-				.listener(new GenericStepListener<>(TableNames.REPEATING_END_AFTER_X_TIMES, destinationRepeatingEndAfterXTimesRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPEATING_END_AFTER_X_TIMES, destinationRepeatingEndAfterXTimesRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), false))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -353,7 +353,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingEndDateRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_END_DATE))
-				.listener(new GenericStepListener<>(TableNames.REPEATING_END_DATE, destinationRepeatingEndDateRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPEATING_END_DATE, destinationRepeatingEndDateRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), false))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -367,7 +367,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingEndNeverRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_END_NEVER))
-				.listener(new GenericStepListener<>(TableNames.REPEATING_END_NEVER, destinationRepeatingEndNeverRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPEATING_END_NEVER, destinationRepeatingEndNeverRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), false))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -381,7 +381,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingModifierRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_MODIFIER))
-				.listener(new GenericStepListener<>(TableNames.REPEATING_MODIFIER, destinationRepeatingModifierRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPEATING_MODIFIER, destinationRepeatingModifierRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -395,7 +395,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingModifierDaysRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_MODIFIER_DAYS))
-				.listener(new GenericStepListener<>(TableNames.REPEATING_MODIFIER_DAYS, destinationRepeatingModifierDaysRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPEATING_MODIFIER_DAYS, destinationRepeatingModifierDaysRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), false))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -409,7 +409,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingModifierMonthsRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_MODIFIER_MONTHS))
-				.listener(new GenericStepListener<>(TableNames.REPEATING_MODIFIER_MONTHS, destinationRepeatingModifierMonthsRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPEATING_MODIFIER_MONTHS, destinationRepeatingModifierMonthsRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), false))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -423,7 +423,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingModifierYearsRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_MODIFIER_YEARS))
-				.listener(new GenericStepListener<>(TableNames.REPEATING_MODIFIER_YEARS, destinationRepeatingModifierYearsRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPEATING_MODIFIER_YEARS, destinationRepeatingModifierYearsRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), false))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -437,7 +437,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationRepeatingOptionRepository))
 				.listener(new GenericChunkListener(TableNames.REPEATING_OPTION))
-				.listener(new GenericStepListener<>(TableNames.REPEATING_OPTION, destinationRepeatingOptionRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPEATING_OPTION, destinationRepeatingOptionRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -451,7 +451,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationReportColumnRepository))
 				.listener(new GenericChunkListener(TableNames.REPORT_COLUMN))
-				.listener(new GenericStepListener<>(TableNames.REPORT_COLUMN, destinationReportColumnRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPORT_COLUMN, destinationReportColumnRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -465,7 +465,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationReportSettingsRepository))
 				.listener(new GenericChunkListener(TableNames.REPORT_SETTINGS))
-				.listener(new GenericStepListener<>(TableNames.REPORT_SETTINGS, destinationReportSettingsRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.REPORT_SETTINGS, destinationReportSettingsRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -479,7 +479,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationSettingsRepository))
 				.listener(new GenericChunkListener(TableNames.SETTINGS))
-				.listener(new GenericStepListener<>(TableNames.SETTINGS, destinationSettingsRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.SETTINGS, destinationSettingsRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -493,7 +493,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTagRepository))
 				.listener(new GenericChunkListener(TableNames.TAG))
-				.listener(new GenericStepListener<>(TableNames.TAG, destinationTagRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.TAG, destinationTagRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -507,7 +507,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTemplateTagRepository))
 				.listener(new GenericChunkListener(TableNames.TEMPLATE_TAGS))
-				.listener(new GenericStepListener<>(TableNames.TEMPLATE_TAGS, destinationTemplateTagRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.TEMPLATE_TAGS, destinationTemplateTagRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -521,7 +521,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTransactionTagRepository))
 				.listener(new GenericChunkListener(TableNames.TRANSACTION_TAGS))
-				.listener(new GenericStepListener<>(TableNames.TRANSACTION_TAGS, destinationTransactionTagRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.TRANSACTION_TAGS, destinationTransactionTagRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -535,7 +535,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationUserRepository))
 				.listener(new GenericChunkListener(TableNames.USER_SOURCE))
-				.listener(new GenericStepListener<>(TableNames.USER_SOURCE, destinationUserRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.USER_DESTINATION, destinationUserRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -549,7 +549,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTransactionRepository))
 				.listener(new GenericChunkListener(TableNames.TRANSACTION))
-				.listener(new GenericStepListener<>(TableNames.TRANSACTION, destinationTransactionRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.TRANSACTION, destinationTransactionRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -563,7 +563,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTemplateRepository))
 				.listener(new GenericChunkListener(TableNames.TEMPLATE))
-				.listener(new GenericStepListener<>(TableNames.TEMPLATE, destinationTemplateRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.TEMPLATE, destinationTemplateRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
@@ -577,7 +577,7 @@ public class BatchConfiguration
 				.processor(new GenericDoNothingProcessor<>())
 				.writer(new GenericWriter<>(destinationTemplateGroupRepository))
 				.listener(new GenericChunkListener(TableNames.TEMPLATE_GROUP))
-				.listener(new GenericStepListener<>(TableNames.TEMPLATE_GROUP, destinationTemplateGroupRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class)))
+				.listener(new GenericStepListener<>(TableNames.TEMPLATE_GROUP, destinationTemplateGroupRepository, context.getBean("jdbcTemplate2", JdbcTemplate.class), true))
 				.allowStartIfComplete(true)
 				.build();
 	}
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/CustomIdGenerator.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/CustomIdGenerator.java
new file mode 100644
index 000000000..96be32804
--- /dev/null
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/CustomIdGenerator.java
@@ -0,0 +1,29 @@
+package de.deadlocker8.budgetmaster.databasemigrator;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SharedSessionContractImplementor;
+import org.hibernate.id.IdentifierGenerator;
+import org.hibernate.id.IdentityGenerator;
+
+import java.io.Serializable;
+
+
+public class CustomIdGenerator extends IdentityGenerator implements IdentifierGenerator
+{
+	public static final String GENERATOR = "de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator";
+
+	@Override
+	public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException
+	{
+		final Serializable id = session.getEntityPersister(null, object).getClassMetadata().getIdentifier(object, session);
+
+		if(id == null)
+		{
+			return super.generate(session, object);
+		}
+		else
+		{
+			return id;
+		}
+	}
+}
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccount.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccount.java
index f11acc22b..71e863aca 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccount.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/account/DestinationAccount.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.account;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.ACCOUNT)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationAccount implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	@Column(unique = true)
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategory.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategory.java
index c5dcc73d5..3f89c0b79 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategory.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/category/DestinationCategory.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.category;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.CATEGORY)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationCategory implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	private String name;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChart.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChart.java
index b1bd4f51c..fa6031c1a 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChart.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/chart/DestinationChart.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.chart;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.CHART)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationChart implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	private String name;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHint.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHint.java
index b21a01f4d..b51fbbde3 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHint.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/hint/DestinationHint.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.hint;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.HINT)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationHint implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	@Column(name = "localization_key")
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIcon.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIcon.java
index a583b68c3..b6b7b2c98 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIcon.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/icon/DestinationIcon.java
@@ -1,13 +1,12 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.icon;
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.ICON)
@@ -20,6 +19,8 @@ import javax.persistence.Table;
 public class DestinationIcon implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	@Column(name = "image_id")
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImage.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImage.java
index 9794f25b0..f750dc76d 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImage.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/image/DestinationImage.java
@@ -1,8 +1,10 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.image;
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.*;
 
@@ -17,6 +19,8 @@ import javax.persistence.*;
 public class DestinationImage implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	@Lob
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOption.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOption.java
index 1f1d1d40d..eb89e70d0 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOption.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/DestinationRepeatingOption.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 import java.time.LocalDate;
 
 @Entity
@@ -22,6 +21,8 @@ import java.time.LocalDate;
 public class DestinationRepeatingOption implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	@Column(name = "start_date")
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEnd.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEnd.java
index c61580dab..ddcc64123 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEnd.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEnd.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.REPEATING_END)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationRepeatingEnd implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 
 	private Integer ID;
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimes.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimes.java
index ec2e912f6..784fcd9c8 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimes.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndAfterXTimes.java
@@ -1,11 +1,14 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
@@ -20,6 +23,8 @@ import javax.persistence.Table;
 public class DestinationRepeatingEndAfterXTimes implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 
 	private Integer ID;
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDate.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDate.java
index c3945ae83..0e81e1898 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDate.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndDate.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 import java.time.LocalDate;
 
 @Entity
@@ -22,6 +21,8 @@ import java.time.LocalDate;
 public class DestinationRepeatingEndDate implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 
 	private Integer ID;
 
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNever.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNever.java
index e76c89238..7ed0ef451 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNever.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/end/DestinationRepeatingEndNever.java
@@ -1,11 +1,14 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.end;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
@@ -20,6 +23,8 @@ import javax.persistence.Table;
 public class DestinationRepeatingEndNever implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 
 	private Integer ID;
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifier.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifier.java
index 3e6dcca0e..b0034154f 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifier.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifier.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.REPEATING_MODIFIER)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationRepeatingModifier implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	@Column(name = "localization_key")
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDays.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDays.java
index 1a9486ada..9ce7fe377 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDays.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierDays.java
@@ -1,11 +1,14 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
@@ -20,5 +23,7 @@ import javax.persistence.Table;
 public class DestinationRepeatingModifierDays implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonths.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonths.java
index 5c974fa8f..11396244a 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonths.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierMonths.java
@@ -1,11 +1,14 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
@@ -20,5 +23,7 @@ import javax.persistence.Table;
 public class DestinationRepeatingModifierMonths implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYears.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYears.java
index 2e5188021..00ef17011 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYears.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/repeating/modifier/DestinationRepeatingModifierYears.java
@@ -1,11 +1,14 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.repeating.modifier;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
@@ -20,5 +23,7 @@ import javax.persistence.Table;
 public class DestinationRepeatingModifierYears implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 }
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumn.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumn.java
index 4149e7f19..c85efde7d 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumn.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportColumn.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.report;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.REPORT_COLUMN)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationReportColumn implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	private boolean activated;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettings.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettings.java
index 609172157..69e8626c8 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettings.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/report/DestinationReportSettings.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.report;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 import java.time.LocalDate;
 
 @Entity
@@ -22,6 +21,8 @@ import java.time.LocalDate;
 public class DestinationReportSettings implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	private LocalDate date;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettings.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettings.java
index ca256f96c..2166bdb34 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettings.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/settings/DestinationSettings.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.settings;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 import java.time.LocalDate;
 
 @Entity
@@ -22,6 +21,8 @@ import java.time.LocalDate;
 public class DestinationSettings implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	private String currency;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTag.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTag.java
index fb757f694..4745f3589 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTag.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTag.java
@@ -1,11 +1,14 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.tag;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
@@ -20,6 +23,8 @@ import javax.persistence.Table;
 public class DestinationTag implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	private String name;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTag.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTag.java
index e328392e6..ef80a7bc0 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTag.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTemplateTag.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.tag;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.TEMPLATE_TAGS)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationTemplateTag implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	@Column(name = "template_id")
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTag.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTag.java
index a76280ea4..676effa24 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTag.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/tag/DestinationTransactionTag.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.tag;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.TRANSACTION_TAGS)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationTransactionTag implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	@Column(name = "transaction_id")
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplate.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplate.java
index de35e361f..56c175f2b 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplate.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/template/DestinationTemplate.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.template;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.TEMPLATE)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationTemplate implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	@Column(name = "template_name")
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroup.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroup.java
index 0eb5e7aed..7f66d18a8 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroup.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/templateGroup/DestinationTemplateGroup.java
@@ -1,11 +1,14 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.templateGroup;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
 import javax.persistence.Table;
 
@@ -20,6 +23,8 @@ import javax.persistence.Table;
 public class DestinationTemplateGroup implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	private String name;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransaction.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransaction.java
index 0b62f6931..ecf13ba5b 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransaction.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/transaction/DestinationTransaction.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.transaction;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 import java.time.LocalDate;
 
 @Entity
@@ -22,6 +21,8 @@ import java.time.LocalDate;
 public class DestinationTransaction implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	private Integer amount;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUser.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUser.java
index 75ef2fe45..720c88b41 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUser.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/destination/user/DestinationUser.java
@@ -1,14 +1,13 @@
 package de.deadlocker8.budgetmaster.databasemigrator.destination.user;
 
 
+import de.deadlocker8.budgetmaster.databasemigrator.CustomIdGenerator;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.ProvidesID;
 import de.deadlocker8.budgetmaster.databasemigrator.destination.TableNames;
 import lombok.*;
+import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
 @Table(name = TableNames.USER_DESTINATION)
@@ -21,6 +20,8 @@ import javax.persistence.Table;
 public class DestinationUser implements ProvidesID
 {
 	@Id
+	@GeneratedValue(generator = "custom_generator")
+	@GenericGenerator(name = "custom_generator", strategy = CustomIdGenerator.GENERATOR)
 	private Integer ID;
 
 	private String name;
diff --git a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/listener/GenericStepListener.java b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/listener/GenericStepListener.java
index 31608e29f..4ca30d9f1 100644
--- a/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/listener/GenericStepListener.java
+++ b/BudgetMasterDatabaseMigrator/src/main/java/de/deadlocker8/budgetmaster/databasemigrator/listener/GenericStepListener.java
@@ -20,12 +20,14 @@ public class GenericStepListener<T extends ProvidesID> implements StepExecutionL
 	private final String tableName;
 	private final DestinationRepository<T> repository;
 	private final JdbcTemplate jdbcTemplate;
+	private final boolean adjustSequence;
 
-	public GenericStepListener(String tableName, DestinationRepository<T> repository, JdbcTemplate jdbcTemplate)
+	public GenericStepListener(String tableName, DestinationRepository<T> repository, JdbcTemplate jdbcTemplate, boolean adjustSequence)
 	{
 		this.tableName = tableName;
 		this.repository = repository;
 		this.jdbcTemplate = jdbcTemplate;
+		this.adjustSequence = adjustSequence;
 	}
 
 	@Override
@@ -34,8 +36,11 @@ public class GenericStepListener<T extends ProvidesID> implements StepExecutionL
 		LOGGER.info("\n");
 		LOGGER.info(">>> Migrate {}s...", tableName);
 
-		LOGGER.debug("Resetting sequence to 0");
-		jdbcTemplate.update(MessageFormat.format("ALTER SEQUENCE {0}_id_seq RESTART WITH 1", tableName));
+		if(adjustSequence)
+		{
+			LOGGER.debug("Resetting sequence to 0");
+			jdbcTemplate.update(MessageFormat.format("ALTER SEQUENCE {0}_id_seq RESTART WITH 1", tableName));
+		}
 	}
 
 	@Override
@@ -44,10 +49,13 @@ public class GenericStepListener<T extends ProvidesID> implements StepExecutionL
 		final int count = Utils.getCommitCount(stepExecution);
 		LOGGER.info(">>> Successfully migrated {} {}s\n", count, tableName);
 
-		final int highestUsedID = getHighestUsedID();
-		final int newSequence = highestUsedID + 1;
-		LOGGER.debug("Adjusting sequence to {} ({})", newSequence, highestUsedID);
-		jdbcTemplate.update(MessageFormat.format("ALTER SEQUENCE {0}_id_seq RESTART WITH {1}", tableName, newSequence));
+		if(adjustSequence)
+		{
+			final int highestUsedID = getHighestUsedID();
+			final int newSequence = highestUsedID + 1;
+			LOGGER.debug("Adjusting sequence to {} ({})", newSequence, highestUsedID);
+			jdbcTemplate.update(MessageFormat.format("ALTER SEQUENCE {0}_id_seq RESTART WITH {1}", tableName, newSequence));
+		}
 
 		return null;
 	}
-- 
GitLab