【发布时间】:2020-12-31 13:16:45
【问题描述】:
我正在尝试使用本机查询从多个表中提取 DTO 列表,但文档没有帮助。 这是两个实体类:
@Entity
@Table(name="addresses")
data class Addresses (
@Id
@Column(name="address_id")
val address_id:Long=0,
@Column(name="address_name")
val address_name:String="",
@OneToOne
@JoinColumn(name = "emp_id")
private var pos: Employee?
)
import com.fasterxml.jackson.annotation.JsonManagedReference
import javax.persistence.*
@Entity
@Table(name = "employee")
data class Employee (
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "emp_id")
val emp_id:Long=0,
@Column(name = "emp_name")
val emp_name:String="",
@OneToOne(mappedBy = "pos", cascade = [CascadeType.ALL],
orphanRemoval = true, fetch = FetchType.EAGER)
private var posAddress: Addresses,
)
我想用这个CustomDTO来提取结果集
@Introspected
class CustomDTO (
val emp_id:Long?,
val emp_name:String?,
val address_name:String?
)
所以我必须使用本机查询才能做到这一点:
@Repository
interface EmployeeRepository : JpaRepository<Employee, Long> {
@Join(value="addresses", type = Join.Type.FETCH)
@Query("select e.emp_id,emp_name,a.address_name from employee e join addresses a on a.emp_id=e.emp_id")
fun getResult():List<CustomDTO>
}
但是当我尝试运行它时,我得到一个错误: 实体中不存在属性地址名称:com.example.domain.Employee
有什么办法可以解决这个问题吗?
【问题讨论】:
-
为什么不获取员工(也返回地址)并稍后转换它?
-
实际上,在项目的后期,我可能最终会使用很多与表无关的本机查询。
-
尝试创建一个 customDTO 存储库并在那里添加相同的查询?