Blaze Persistence Quarkus3集成中,@Mapping("this")结合带构造函数的子视图抛出运行时异常的问题咨询
我在使用com.blazebit:blaze-persistence-integration-quarkus-3依赖时,遇到了一个棘手的运行时异常,想请教下社区的各位有没有相关的经验或者分析思路。
问题场景复现
我定义了如下的实体视图结构,其中Validation实体类本身包含startTime和endTime两个字段:
@EntityView(Validation.class) public interface ValidationView extends IValidation { @Override @Mapping("this") TimePeriodForValidation getPeriod(); @EntityView(Validation.class) abstract class TimePeriodForValidation extends TimePeriodView { public TimePeriodForValidation( @Mapping("startTime") LocalDateTime startTime, @Mapping("endTime") LocalDateTime endTime ) { super(startTime, endTime); } } }
这里ValidationView通过@Mapping("this")返回一个子视图类型TimePeriodForValidation的period属性,而子视图TimePeriodForValidation则通过带@Mapping注解的构造函数,直接注入Validation实体的startTime和endTime字段值。
遇到的异常
运行时触发了RuntimeException,错误提示为:
"Probably we did something wrong, please contact us if you see this message."
追踪异常栈后发现,这是因为框架在尝试调用TimePeriodForValidation的构造函数时,传入了不符合预期的参数:一个名为TimePeriodForValidation_$$_javassist_entityview的动态代理类实例(看起来是基于TimePeriodForValidation生成的),以及一个Map对象,而非构造函数定义中预期的两个LocalDateTime类型参数。
已发现的线索
我注意到这个问题似乎只在构造函数类型为ProxyFactory.ConstructorKind.CREATE时才会触发,并且已经在项目的代码仓库提交了对应的Issue。
想请教下各位:为什么会出现这种构造函数参数不匹配的情况?是不是@Mapping("this")和带构造函数的子视图组合使用时,框架的代理生成逻辑出现了冲突?
备注:内容来源于stack exchange,提问作者Anton Astafiev

