Spring boot JPA извлекает определенный столбец из запроса crudRepository - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь получить поле "name" из моего пользовательского класса в моем классе Employee, чтобы я мог избежать выполнения дополнительного запроса для получения имени пользователя.

На данный момент я только смогчтобы получить user_id таким образом

Мой класс пользователя

@Entity @Table(name="user", schema = "public") @Getter @Setter @NoArgsConstructor @Accessors(chain = true)
public class User implements Serializable{
    private @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "user_id") Long id;
    private @Column(unique = true) String email;
    private String name;
}

Мой класс сотрудника

@Entity @Table(name = "employee",schema = "public") @Getter @Setter @NoArgsConstructor @Accessors(chain = true)
public class Employee implements Serializable {
    private @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "employee_id") Long id;
    @JsonIgnore @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "fk_user_id",insertable = false,updatable = false) private User user;
    private @Column(name="fk_user_id") Long userId;
}

я знаю, что не могу получить имя, не выбрав его, поэтому я попыталсяиспользуя пользовательский запрос в моем crudRepository

public interface EmployeeRepository extends CrudRepository<Employee, Long>{
    @Query(value = "SELECT employee.*, public.user.name FROM public.employee INNER JOIN public.user ON public.user.user_id = employee.fk_user_id ", nativeQuery = true)
    List<Employee> findEmployees();
}

Запрос возвращает то, что я ожидаю, но я не знаю, как извлечь результирующий столбец "name" в моем классе Employee

Любая помощь или руководстводобро пожаловать, спасибо за чтение

Ответы [ 2 ]

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

Когда вы хотите получить больше данных, чем то, что описано в вашем классе сущностей, и вы не хотите получать ленивые отношения, вы можете создать новый класс, например, один класс DAO, который будет иметь все атрибуты, которые вы хотитечтобы получить.Так что в вашем случае, вероятно, EmployeeDAO класс со всеми атрибутами сущности сотрудника плюс userName.А затем использовать его как возвращенную коллекцию:

@Query(your query)
List<EmployeeDAO> findEmployees();
0 голосов
/ 23 октября 2018

На мой взгляд, вы должны выбрать только Employee, а затем получить имя из выбранных User.Кроме того, я не думаю, что вам нужно, чтобы запрос был родным:

@Query(value = "SELECT e FROM public.employee e INNER JOIN FETCH e.user")
    List<Employee> findEmployees();
}

Тогда:

for(Employee e: findEmplyees){
    String name = e.getUser.getName();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...