您可以尝试不要自己编写此 sql,而是使用存储库创建这样的代码:
@Repository
public interface UserAssignmentRolelRepository extends JpaRepository<UserModel, Long>{
public List<UserAssignmentRole> findByRole(Role role);
}
然后:
@Autowired
UserAssignmentRolelRepository repository ;
public void someMethod(){
List<UserAssignmentRole> userAssignmentRoles = repository.findByRole(Role.admin);
}
更新 1
正如in this answer 指出的那样:非常规命名。您可以将枚举中的标签更改为大写。
public enum Role{
Admin,
Member,
Pending
}
然后:
@Query("select uar from UserAssignmentRole uar where uar.role=com.example.package.Role.Admin")
public List<UserAssignmentRole> listAdmin(Long userID, Long assignmentID);
更新 2
但如果你真的想在 DB 中使用小写字母。
它需要更多的代码来改变。枚举更改为:
public enum Role{
Admin("admin"),
Member("member"),
Pending("pending");
private String name;
Role(String name) {
this.name = name;
}
public String getName() { return name; }
public static Role parse(String id) {
Role role = null; // Default
for (Role item : Role.values()) {
if (item.name.equals(id)) {
role = item;
break;
}
}
return role;
}
}
在UserAssignmentRole
// @Enumerated(EnumType.STRING)
@Convert(converter = RoleConverter.class)
private Role role;
还有额外的课程:
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class RoleConverter implements AttributeConverter<Role, String> {
@Override
public String convertToDatabaseColumn(Role role) {
return role.getName();
}
@Override
public Role convertToEntityAttribute(String dbData) {
return Role.parse(dbData);
}
}