【发布时间】:2019-01-15 08:38:59
【问题描述】:
我在我的 Spring Boot 项目中使用硬编码值的查询,这很好:
@Query("select user from Users user where user.mobileNumber=?1 and not user.status=-2")
Users FindNotDeletedUserByMobileNumber(String MobileNumber);
但是,我想使用非硬编码值,例如。从枚举中读取,我尝试了这个:
@Query("select user from Users user where user.mobileNumber=?1 and not user.status=com.taxikar.enums.User_Status.Deleted")
Users FindNotDeletedUserByMobileNumber(String MobileNumber)
但是这个在构建时会出错:
'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract com.taxikar.entity.Users com.taxikar.repository.UserRepository.FindNotDeletedUserByMobileNumber(java.lang.String)!
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:588) ~[spring-beans-4.3.14.RELEASE.jar:4.3.14.RELEASE]
我在我的其他类中使用这个枚举值并且它们工作正常,例如:
if (user.getStatus() == User_Status.Deleted.getId())
return new BaseResponse(BR_Status.error.getId(), BR_ErrorCodes.NotAuthorizedUser.getStringValue() + "01",
"error 755", user.getId());
即使像上面那样使用.getId 或.getStringValue,但在我的查询结束时也没有解决任何问题。我做错了什么?
这是我的枚举代码:
public enum User_Status implements IResponse
{
Deleted(-2),
Unauthorized(-1),
NotCompleteGeneralInfo(0),
CompleteGeneralInfo(1);
private int value;
private String stringValue;
User_Status(int value)
{
this.value = value;
}
User_Status(String stringValue){this.stringValue=stringValue;}
@Override
public int getId()
{
return value;
}
@Override
public String getStringValue()
{
return stringValue;
}
}
这个枚举实现了IResponse,就像这样:
public interface IResponse
{
String getStringValue();
int getId();
}
这是我的存储库:
public interface UserRepository extends JpaRepository<Users, String>
{
@Query("select user from Users user where user.mobileNumber=?1 and not user.status=com.taxikar.enums.User_Status.Deleted")
Users FindNotDeletedUserByMobileNumber(String MobileNumber);
}
这是我的实体类:
@Entity
@Table(name = "users")
public class Users
{
// these fields are feed by us not the user
@Id
@GeneratedValue(generator = "uuid2")
@Column(columnDefinition = "char(36)")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
private String id;
@Column(name = "STATUS") // User status ===>-2: Deleted , -1: unauthorized , 0: user info is not complete , 1: complete user
private int status;
@Column(name = "RATE")
private String rate;
//Not Optional fields
@Column(name = "FIRST_NAME")
private String firstName;
@Column(name = "LAST_NAME")
private String lastName;
@Column(name = "SEX") // Sex ====> 1:women 2:men
private int sex;
@Column(name = "MOBILE_NUMBER")
private String mobileNumber;
@Column(name = "USER_IMG")
private String userImg;
@Column(name = "IDENTITY_NUMBER")
private String identityNumber;
@Column(name = "USER_IDENTITY_CARD_IMG")
private String userIdentityCardImg;
//Optional fields
@Column(name = "EMAIL")
private String email;
@Column(name = "BIRTHDAY")
private String birthday;
@Column(name = "DESCRIPTION")
private String description;
// not Optional fields for driver
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DRIVER_DETAIL")
private DriverDetail driverDetail;
//Login related fields
@Column(name = "TOKEN")
private String token;
@Column(name = "TOKEN_TIMESTAMP")
private Timestamp tokenTimeStamp;
@Column(name="SMS_COUNT")
private int smsCount;
@Column(name="SMS_COUNT_TIMESTAMP")
private Timestamp smsCountTimeStamp;
+++ constructor and setters and getters.
}
【问题讨论】:
-
我什至搜索了很多,我找到了一些像这里所说的解决方案:link 但没有一个对我有用!
标签: java spring spring-boot spring-data-jpa jpql