JPA данных Spring с сервером MySQL: регистр игнорируется по умолчанию для класса Entity - PullRequest
0 голосов
/ 02 января 2019

У меня есть следующий класс сущностей:

@Entity
@Table(name = "employee")
public class Employee {

  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE)
  private long id;

  @NotNull
  @NaturalId
  private String tagId;

  @NotNull
  @Size(max = 255, message = "Employee name can not be longer than 255 character")
  private String name;

  @Type(type = "yes_no")
  private boolean isInside;

  @PastOrPresent(message = "Last RFID timestamp can not be in the future")
  private ZonedDateTime lastSwipe;

  //Constuctors, getters and setters
}

Со следующим JpaRepository:

public interface EmployeeRepository extends JpaRepository<Employee, Long> {

  Optional<Employee> findByTagId(String tagId);

}

Допустим, у меня есть сотрудник в базе данных с tagId "SomeStringForID". Прямо сейчас, если я запрашиваю базу данных, используя метод findByTagId, где tagId, например, равен "sOmEStringforid", сотрудник будет найден в базе данных . Если я попытаюсь сохранить другого сотрудника с tagId "sOmEStringforid", я получу исключение благодаря аннотации @NaturalId.

Есть идеи, что вызывает такое поведение? Именованные запросы Spring имеют параметры для IgnoreCase, поэтому я почти уверен, что это не должно быть поведением по умолчанию. Я также проверил один из моих старых проектов, где, к моему удивлению, я обнаружил такое же поведение. Я попробовал обе версии JDK 8 и 11.

1 Ответ

0 голосов
/ 02 января 2019

MySQL не чувствителен к регистру. Вы можете запросить запись, используя значение «a», и она может вернуть запись «A» или «a».

См. Следующее:

MySQL без учета регистра

MySQL чувствительный к регистру запрос

Как можно сделать сравнение строк с учетом регистра SQL в MySQL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...