Spring Boot + Java 11 + Mybatis:@Many 在 Annotations 方法中被忽略

达尼乌斯爪哇

我是 Mybatis 的新手,我在使用 @Many 获取数据时遇到了问题。

我有两个类,第二个类的对象是第一类对象 Set<> 的值;

类是:

public class InformationObjectMergedWithCopyrights {

    private Long id;
    private String titleLt;
    private String accountingNumber;
    private String inventoryNumber;
    private Long referenceYear;
    private Long duration;
    private String propertyRights;

    private Set<BavicCredit> creditsList = new HashSet<>();
    
    getters/setters, constructor, toString...
}

public class BavicCredit {

    private Long id;
    private Long informationObjectId;
    private String bavicLabel;
    private String bavicRole;
    
        getters/setters, constructor, toString...
}

我有 sql 提供程序,它生成查询字符串:

public class InformationObjectSqlProvider {
    public String selectByInventoryNumberConditionAccountingNumber(InventoryNumberReportParamsDao reportParamsDao) {
        
        StringBuilder sql = new StringBuilder("SELECT " +
            "io.ID AS id, " +
            "io.TITLE_LT AS titleLt, " +
            "io.ACCOUNTING_NUMBER AS accountingNumber, " +
            "io.INVENTORY_NUMBER AS inventoryNumber, " +
            "io.REFERENCE_YEAR AS referenceYear, " +
            "io.DURATION AS duration, " +
            "cvt.NAME AS propertyRights  " +
            "FROM SCHEMA_ONE.INFORMATION_OBJECT io " +
            "INNER JOIN SCHEMA_ONE.COPYRIGHTS c ON c.INFORMATION_OBJECT_ID = io.ID " +
            "INNER JOIN SCHEMA_TWO.CLASSIFIER_VALUES cv2 ON c.PROPERTY_RIGHTS = cv2.CODE " +
            "INNER JOIN SCHEMA_TWO.CLASSIFIER_VALUE_TRANSLATIONS cvt ON cv2.ID = cvt.CLASSIFIER_VALUE_ID AND cvt.LANGUAGE_ID = 1 " +
            "WHERE io.INVENTORY_NUMBER = #{reportParamsDao.inventoryNumberCode} ORDER BY accountingNumber ASC");

        return sql.toString();
    }
}

最后,我创建了一个映射器:

@Mapper
public interface InformationObjectMapper {

    InformationObjectSqlProvider provider = new InformationObjectSqlProvider();


    @SelectProvider(type = InformationObjectSqlProvider.class, method = "selectByInventoryNumberConditionAccountingNumber")
    @Results(value = {
        @Result(property = "creditsList",
            column = "SCHEMA_ONE.INF_OBJ_CLASIFFIER.INFORMATION_OBJECT_ID",
            javaType = Set.class, many = @Many(select = "selectCredits"))
    })
    List<InformationObjectMergedWithCopyrights> selectByInventoryNumberConditionAccountingNumber(@Param("reportParamsDao") InventoryNumberReportParamsDao reportParamsDao);

    @Select("SELECT * FROM SCHEMA_ONE.INF_OBJ_CLASSIFIER ioc WHERE ioc.INFORMATION_OBJECT_ID = #{informationObjetId} AND ioc.\"TYPE\" = 'CREDIT' ")
    @Results(value = {
        @Result(property = "bavicLabel", column = "BAVIC_LABEL"),
        @Result(property = "bavicRole", column = "ROLE")
    })
    Set<BavicCredit> selectCredits(@Param("informationObjetId") Long informationObjetId);
}

我的问题是此代码不返回 BavicCredit 类集。Set 总是空的,就像在第一个类中定义的一样。似乎根本没有调用 selectCredits 方法。外键存在于数据库中。我相信,我缺少一些小代码或属性映射。

Java 11、Spring Boot 2.5.0、Mybatis mybatis-spring-boot-starter 2.2.0、数据库Oracle com.oracle.database.jdbc ojdbc8

提前致谢。

PS 我已经在 MyBatis 中尝试了一对多的关系,但仍然缺少一些东西

大街

当使用嵌套选择 [1] 时,column属性的值应该是第一个查询结果集中的列名。
在第一个查询的结果集中,嵌套查询的参数是id,因此@Result应该如下所示。

@Result(
  property = "creditsList",
  column = "id",
  javaType = Set.class,
  many = @Many(select = "selectCredits"))

[1] 有关基础知识,请阅读文档的这一部分

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring MVC HandlerInterceptor在Java配置中被忽略

Flyway和MyBatis:Spring Boot的Java配置

Spring Boot 2.x Servlet Path在测试中被忽略

Heroku无法部署Java 11 Spring Boot App

旧版本的 Spring Boot 无法在 Java 11 上启动

将ArrayList <Object>的列表转换为自定义对象的最佳方法是什么java11 Spring Boot 2.1

从Spring Boot 2.0.5 / Java 8迁移后,Spring Boot 2.1 / Java 11应用程序无法识别突出字符

使用Java 11和Spring Boot的java.net.http.HttpClient调用的响应不可靠

将现有的Spring Boot项目从Java 1.8更新到Java 11

Spring Boot Mybatis动态查询

Spring Boot无法在Java 11中加载和执行测试

如何在Bitbucket上设置基于Java 11的Spring Boot管道?

如何在Spring-boot多模块Java 11项目中添加Spark依赖项

无法在 Java 11 Spring Boot 项目上使用 JSTL 导入标签库

扫描Spring Boot .jar文件时在Java 11 jdeps工具上获取NPE

为什么Infinispan在Spring Boot / Java 11上出现NoClassDefFoundError失败?

使用 java 11 运行 Spring Boot 多版本 jar 时出现 ClassNotFoundException

Spring Boot使用Spring Profile忽略Java配置类中的bean

Spring Boot配置覆盖被忽略

Spring Boot忽略主类

Spring Boot MongoRepository忽略验证

Spring Boot忽略ObjectMapper模块

不支持请求方法“POST”-Java Spring Boot

如何从Spring Boot Service层调用Java类方法

在HTML中调用Java方法/变量-Thymeleaf Spring Boot

在Java Spring Boot中从XML加载属性的正确方法

Java spring boot 调用方法全部设置好

Spring Boot ApplicationPidListener的Java配置

Java Spring Boot计划作业