У меня есть простая сущность, Код, которую мне нужно сохранить в базе данных MySQL.
public class Code implements Serializable {
@Id
private String key;
private String description;
...getters and setters...
}
Пользователь предоставляет файл, полный ключей, пар описаний, которые я читаю, преобразую в объекты Code и затем вставляю в одну транзакцию, используя em.merge (код). Файл обычно содержит дубликаты записей, с которыми я сталкиваюсь, сначала добавляя их в карту, введенную в поле ключа, когда я их читаю.
Однако возникает проблема, когда ключи отличаются только регистром (например: XYZ и XyZ). Моя карта, конечно, будет содержать обе записи, но во время процесса слияния MySQL видит, что два ключа одинаковы, и вызов слияния не выполняется с MySQLIntegrityConstraintViolationException.
Я мог бы легко это исправить, заглавными буквами, когда я их читал, но я бы хотел точно понять, что происходит не так. Я пришел к выводу, что JPA рассматривает XYZ и XyZ как разные ключи, но MySQL считает, что они одинаковы. Таким образом, когда JPA проверяет свой список известных ключей (или делает все, что делает, чтобы определить, нужно ли ему выполнить вставку или обновление), он не может найти предыдущую вставку и выдать другую, которая затем дает сбой. Это Corrent? Есть ли что-то еще, кроме лучшей фильтрации данных клиента?
Я не определил .equals или .hashCode в классе Code, так что, возможно, это проблема.