У меня есть следующий класс сущностей:
@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.