4
Можно ли использовать параметр enum с помощью аннотации @Query?Аннотации Spring @Query с параметром enum
Вот код, я использую, чтобы найти роль пользователя:
Role userRole = roleRepository.findByRole(Roles.USER);
if (userRole == null) {
LOGGER.debug("No role found with role: {}", Roles.USER);
}
и печатает
No role found with role: ROLE_USER
, но если я пытаюсь найти все роли это то, что я получаю:
for (Role r : roleRepository.findAll())
LOGGER.debug("{}", r);
[email protected][roleId=1,role=role_admin,version=0]
[email protected][roleId=2,role=role_staff,version=0]
[email protected][roleId=3,role=role_user,version=0]
[email protected][roleId=4,role=role_guest,version=0]
Как вы видите, роль пользователя существует.
RoleRepository:
public interface RoleRepository extends JpaRepository<Role, Long> {
@Query("SELECT r FROM Role r WHERE LOWER(r.role) = LOWER(:role)")
public Role findByRole(@Param("role") Roles role);
}
Роль:
@Entity
@Table(name = "role")
public class Role {
public enum Roles {
ADMIN("ROLE_ADMIN"),
STAFF("ROLE_STAFF"),
USER("ROLE_USER"),
GUEST("ROLE_GUEST");
private String role;
private Roles(String role) {
this.role = role;
}
public String getRole() {
return role;
}
@Override
public String toString() {
return role;
}
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "role_id", updatable = false)
private Long roleId;
@Column(name = "role")
private String role;
@Version
@Column(name = "version")
private long version = 0;
public Long getRoleId() {
return roleId;
}
public String getRole() {
return role;
}
public long getVersion() {
return version;
}
@Override
public String toString() {
return new ReflectionToStringBuilder(this).toString();
}
}
Пробовал это без каких-либо успехов. После включения более конкретного ведения журнала я получил это сообщение: 09: 20: 28.953 [main] TRACE o.h.type.descriptor.sql.BasicBinder - параметр привязки [1] как [VARBINARY] - ROLE_USER. Связает ли этот параметр с неправильным типом? – perak
Возможно, попробуйте использовать параметр «String» в методе репозитория, а не Enum напрямую. Если вы используете собственный SQL в запросе, попробуйте использовать «like» – frandevel