Ожидаемый Spring JPA-запрос не возвращается - PullRequest
0 голосов
/ 23 ноября 2018

Я учусь использовать Spring JPA и настроил свою базу данных для успешного добавления элементов в мою базу данных.У меня просто возникают проблемы при формулировке запроса для получения моих результатов (список сотрудников, отфильтрованный по фамилии):

// Сущность сотрудника:

@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 Ответ

0 голосов
/ 23 ноября 2018

Вам нужно добавить @Column в поле, чтобы jpa знала, как создать сопоставления между базой данных и классом java.

Например:

@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_name" и "last_name" в аннотации являются фактическимиимя столбца базы данных, при необходимости вы должны изменить его.

Кстати, лучше установить доступ к полям сущностей как закрытый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...