我試圖從我的 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();}查詢返回我期望的內容,但我不知道如何在我的 Employee 類中獲取結果列“name”歡迎任何幫助或指導,感謝閱讀
2 回答

當年話下
TA貢獻1890條經驗 獲得超9個贊
在我看來,您應該選擇Employeeonly 然后從 fetched 中獲取名稱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();
}

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
當您想要獲取比實體類中描述的更多的數據,并且不想獲取惰性關系時,您可以創建一個新類,例如一個包含您想要獲取的所有屬性的 DAO 類。因此,在您的情況下,可能會EmployeeDAO使用員工實體的所有屬性加上userName. 然后將其用作返回的集合:
@Query(your query)
List<EmployeeDAO> findEmployees();
添加回答
舉報
0/150
提交
取消