是否有可能将多个输出属性从一个过程映射到被管理实体或POJO?



我有一个过程,给定一些输入将产生一组输出参数。我能够调用该过程并获得结果(尽管是作为hashmap),但是尽管我尽了最大努力,还是无法从存储库生成实体或POJO。

详细说明我想要达到的目标:

给定的实体:

@NamedStoredProcedureQuery(
name = "someProcedure",
procedureName = "SOME_PROCEDURE", 
parameters = [
StoredProcedureParameter(mode = ParameterMode.IN, name = "IN_ONE", type = String::class),
StoredProcedureParameter(mode = ParameterMode.IN, name = "IN_TWO", type = String::class),
StoredProcedureParameter(mode = ParameterMode.IN, name = "IN_THREE", type = String::class),
StoredProcedureParameter(mode = ParameterMode.OUT, name = "OUT_ONE", type = String::class),
StoredProcedureParameter(mode = ParameterMode.OUT, name = "OUT_TWO", type = String::class),
StoredProcedureParameter(mode = ParameterMode.OUT, name = "OUT_THREE", type = String::class)],
resultClasses = [ResultClass::class])
@Entity
data class ResultClass(
@Id
@GeneratedValue
val id: Long
@Column(name = "OUT_ONE")
val outOne: String,
@Column(name = "OUT_TWO")
val outTwo: String,
@Column(name = "OUT_THREE")
val outThree: String
)

与repo相应:

@Repository
interface ResultClassRepo : CrudRepository<ResultClass, Long> {
@Procedure(name = "someProcedure")
@Transactional
fun someProcedure(
@Param("IN_ONE")
inOne: String,
@Param("IN_TWO")
inTwo: String,
@Param("IN_THREE")
inThree: String): ResultClass
}

即使提供了resultclass,结果仍然是一个hashmap,所以我得到了一个强制转换异常。我已经尝试了使用@SqlResultSetMapping定义映射的方法,但结果是相同的。

就好像没有"manual"就不能映射我们的参数。干预,所以我的问题是,如果这是可行的,或者如果@NamedStoredProcedureQuery只支持哈希图作为在这种情况下的结果?

免责声明:在过程结束时,没有关联表可以选择,也没有关联实体,因为我认为这是类似问题的可能解决方案。

我希望避免为存储库定制实现,因此我认为在这种情况下这不是一个有效的解决方案。

供将来观看的人参考。我没有找到使用所描述的确切方法的解决方案,但是使用@Query工作得很好:

@Repository
interface ResultClassRepo : CrudRepository<ResultClass, Long> {
@Query(value = "exec [procedure] @IN_ONE = :IN_ONE, @IN_TWO = :IN_TWO, @IN_THREE = :IN_THREE", nativeQuery = true)
fun someProcedure(
@Param("IN_ONE")
inOne: String,
@Param("IN_TWO")
inTwo: String,
@Param("IN_THREE")
inThree: String): ResultClass
}

其中ResultClass像一个正常实体一样构建(只是没有表)。

最新更新