我正在学习如何使用springjpa,am已经将我的数据库配置为成功地向数据库添加元素。我只是在制定查询以检索结果(按姓氏筛选的员工列表)时遇到问题:
//员工实体:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
long id;
String firstName;
String lastName;
public Employee() { }
public Employee(long id, String firstName, String lastName) {
super();
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((firstName == null) ? 0 : firstName.hashCode());
result = prime * result + (int) (id ^ (id >>> 32));
result = prime * result + ((lastName == null) ? 0 : lastName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Employee other = (Employee) obj;
if (firstName == null) {
if (other.firstName != null)
return false;
} else if (!firstName.equals(other.firstName))
return false;
if (id != other.id)
return false;
if (lastName == null) {
if (other.lastName != null)
return false;
} else if (!lastName.equals(other.lastName))
return false;
return true;
}
@Override
public String toString() {
return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + "]";
}
}
我的问题在下面的“我的存储库”界面中的查询中。调用 findByLastName(String lastName)
方法时,我总是接收一个空集合--即使传递我知道存在于数据库中的姓氏:
public interface EmployeeRepository
extends CrudRepository<Employee, Long> {
@Query("select u from Employee u where u.lastName = ?1")
public Collection<Employee> findByLastName(String lastName);
}
另外值得一提的是,我要查询的列名为 last_name
在“我的数据库”列中(带下划线)。我不确定这是否有什么不同。
我哪里出错了?
1条答案
按热度按时间ni65a41a1#
您需要在字段上添加@column,让jpa知道如何创建数据库和java类之间的Map。
例如:
如果没有@table,jpa会将实体名识别为表名。如果它们不相同,则应在类中添加@table并指定表名。
注解中的“first\u name”和“last\u name”是数据库列的实际名称,如有必要,应进行更改。
顺便说一下,最好将实体字段的访问设置为私有。