Java 在spring数据jpa中使用联接查询多表的列
说明: 我有两张桌子,Shop_Employee和Shop_Employee类型。我想在显示员工详细信息时直接显示typeName,但我不想配置这两个实体之间的relationshipOneToMany或ManyToOne。因为这将加载所有Shop\u Employee\u Type列的值,但这些值对我来说是无用的,我只需要Shop\u Employee\u Type的typeName。 下面是我的代码,但它不起作用 商店雇员类型: 商店职员: 存储库:Java 在spring数据jpa中使用联接查询多表的列,java,spring-mvc,spring-boot,spring-data-jpa,Java,Spring Mvc,Spring Boot,Spring Data Jpa,说明: 我有两张桌子,Shop_Employee和Shop_Employee类型。我想在显示员工详细信息时直接显示typeName,但我不想配置这两个实体之间的relationshipOneToMany或ManyToOne。因为这将加载所有Shop\u Employee\u Type列的值,但这些值对我来说是无用的,我只需要Shop\u Employee\u Type的typeName。 下面是我的代码,但它不起作用 商店雇员类型: 商店职员: 存储库: 这可能会如我所愿显示typeName,但
这可能会如我所愿显示typeName,但在保存新实体Shop_员工时出现错误;如果我为“typeName”添加@Transient,它可以成功保存,但是当我查询实体Shop_Employee时,“typeName”的值为空。您的查询应该返回两个对象Shop_Employee和一个字符串,因此返回结果不应该是List,应该是:
@Query(value = "select u.*, t.type_name from shop_employee ...", nativeQuery = true)
List<Object[]> findAllData();
因此,在ShopEmployee实体中,您不需要使用:
//@Transient
//private String typeName;
@Query(value = "select u.*,t.type_name from shop_employee u inner join shop_employee_type t on u.type_id=t.type_id", nativeQuery = true)
List<ShopEmployee> findAllData();
@Query(value = "select u.*, t.type_name from shop_employee ...", nativeQuery = true)
List<Object[]> findAllData();
List<Object[]> list = findAllData();
for(Object[] obj : list){
ShopEmployee shopEmployee = (ShopEmployee) obj[0];
String type_name = (String) obj[1];
}
//@Transient
//private String typeName;