未返回预期的spring jpa查询

vs91vp4v  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(285)

我正在学习如何使用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 在“我的数据库”列中(带下划线)。我不确定这是否有什么不同。
我哪里出错了?

ni65a41a

ni65a41a1#

您需要在字段上添加@column,让jpa知道如何创建数据库和java类之间的Map。
例如:

@Entity
@Table(name="target_table_name")
public class Employee {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;

    @Column(name="first_name")
    private String firstName;

    @Column(name="last_name")
    private String lastName;
    //getter and setter and something else
}

如果没有@table,jpa会将实体名识别为表名。如果它们不相同,则应在类中添加@table并指定表名。
注解中的“first\u name”和“last\u name”是数据库列的实际名称,如有必要,应进行更改。
顺便说一下,最好将实体字段的访问设置为私有。

相关问题