【问题标题】:How can i extract a DTO from multiple tables in a micronaut application in Kotlin?如何从 Kotlin 的 micronaut 应用程序中的多个表中提取 DTO?
【发布时间】: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 存储库并在那里添加相同的查询?

标签: kotlin micronaut


【解决方案1】:

对于任何挣扎的人:

@Query("select new com.packagename.DeliverySlotDto(ts.active, st.name) from TemplateSlot ts \n" +
        " inner join DeliveryServiceType st on st.id=ts.serviceTypeId where ts.posId = :posId ")
fun findServiceTypeAndStatusDto(posId:Long):List<DeliverySlotDto>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    • 2022-09-29
    • 2016-11-13
    相关资源
    最近更新 更多