我有一个模特用户。有一个字段是contact,它是一个非主键。如何使用此密钥获取数据?这是唯一的密钥。
这是我的模特。
@Entity
@Table(name = "tbl_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
long userId;
@Column(name = "name")
String name;
@Column(name = "email")
String email;
@Column(name = "contact")
String contact;
@Column(name = "category")
String category;
public long getUserId() {
return userId;
}
public void setUserId(long userId) {
this.userId = userId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getContact() {
return contact;
}
public void setContact(String contact) {
this.contact = contact;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public User() {
}
}
这是Service层中的方法。
public User getUserByContact(String contact) {
Optional<User> result = userRepository.findByContact(contact);
User user = result.get();
return user;
}
这是存储库。
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select u from User u where u.contact = ?1")
User findByContact(String contact);
}
我在“用户”下的此部分出现“从用户u中选择u,其中u.contact =?1”时出错,并说“不能解析符号用户”。不胜感激。
答案 0 :(得分:0)
省略@Query部分,如果扩展JpaRepository,则不需要该部分。 As stated in the documentation JPA从方法名称派生查询。
我不确定这是否是一个问题,但是在您的实体类中,您使用long
作为id,在存储库定义(JpaRepository<User, Long>
)中,您使用了Long
。如果这没问题,请纠正我。
答案 1 :(得分:0)
如果你想使用@Query,那么正确的做法是使用@Param来定义变量
@Query("select u from User u where u.contact = :contactVar ", nativeQuery = true) 用户 findByContact(@Param("contactVar")String contactVar);