- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一切都与 MyBatis 和我概述的对象一起工作,直到我在第一个子 List 对象中引入了一个 LIST。所以现在,我的结构是:
我已经通过 XML 映射器尝试了多种方法,并在 resultMap 配置上进行了变体。这是我目前拥有的:
<resultMap id="saleTransaction" type="com.company.sale.domain.Sale" autoMapping="true">
<result property="transactionNumber" column="TRANSACTION_ID"/>
<result property="salesTrip.tripDate" column="TRIP_DATE"/>
<result property="salesTrip.tripNumber" column="TRIP_NUMBER"/>
<result property="salesTrip.tripOriginTerminal.iataCode" column="ORIGIN_IATA_CODE"/>
<result property="salesTrip.tripOriginTerminal.city" column="ORIGIN_CITY_NAME"/>
<result property="salesTrip.tripDestinationTerminal.iataCode" column="DESTINATION_IATA_CODE"/>
<result property="salesTrip.tripDestinationTerminal.city" column="DESTINATION_CITY_NAME"/>
<collection property="salesTransactionPayments" ofType="SalesTransactionPayment">
<result property="amount" column="AMOUNT"/>
<result property="creditCard.cardNumber" column="CC_NUMBER"/>
<result property="creditCard.nameOnCard" column="CCHOLDER_NAME"/>
</collection>
<collection property="salesTransactionItems" column="TRANSACTION_ID" ofType="SalesTransactionItem" select="getSaleItems">
<result property="item" column="ITEM"/>
<result property="price" column="PRICE"/>
<result property="qty" column="QTY"/>
<association property="salesTransactionTaxRates" column="ID" resultMap="taxResult" />
</collection>
</resultMap>
<resultMap id="taxResult" type="com.guestlogix.sale.domain.SalesTransactionTaxRate" autoMapping="true">
<result property="code" column="code"/>
<result property="rate" column="rate"/>
<result property="isFixed" column="isFixed"/>
</resultMap>
对象 SalesTransactionTaxRate 是 SalesTransactionItem 的子对象,后者又是父 Sale 对象的子对象。 SalesTransactionItem 是一个 LIST,然后 SalesTransactionTaxRate 也是一个 LIST。一个 ITEM 可以有很多税,一个 SALE 可以有很多 ITEMS。
我曾尝试将 SalesTransactionTaxRate 映射为 SalesTransactionItem collection 中的一个collection,但同样无济于事。当我使用这种方法时,它甚至根本没有在 IDE 中注册 SalesTransactionTaxRate 包含在 SalesTransactionItem 中。否则,其他对象和属性会自动完成。
所有文档都表明集合中的集合是可能的,但出于某种原因它似乎对我不起作用。
非常感谢任何帮助或建议。
最佳答案
我猜你指的是 <!-- Very Complex Result Map -->
来自 the documentation .事实上,将一个集合映射到另一个集合中是可能的。
你错过的是<id>
结果映射的元素。我承认文档仅说明 id – an ID result; flagging results as ID will help improve overall performance
是不够的,也没有解释它的重要性。此 id 指定用于“分组依据”以构建嵌套列表的列/属性,否则容器对象上的映射匹配 equals 方法可能会产生意外结果。
似乎是通过指定 column
来尝试的<collection>
内的属性.
最终使用<id>
可能不是必需的,但无论如何我强烈推荐它以使事情更清楚。
我刚刚注意到真正的问题:收藏 salesTransactionItems
使用嵌套 select
,这意味着实际上没有使用嵌套映射,因为嵌套 select 是不同范围内的不同语句,使用它自己的结果映射。此结果映射不存在,但默认情况下通过自动映射简单类型的列/属性来简单地完成部分映射,其他(在本例中为集合)将被忽略,然后为 null。此结果映射必须由 getSaleItems
定义和使用选择语句。
下面的映射应该更接近事实:
<resultMap id="saleTransaction" type="com.company.sale.domain.Sale" autoMapping="true">
<id property="transactionNumber" column="TRANSACTION_ID"/>
<result property="salesTrip.tripDate" column="TRIP_DATE"/>
<result property="salesTrip.tripNumber" column="TRIP_NUMBER"/>
<result property="salesTrip.tripOriginTerminal.iataCode" column="ORIGIN_IATA_CODE"/>
<result property="salesTrip.tripOriginTerminal.city" column="ORIGIN_CITY_NAME"/>
<result property="salesTrip.tripDestinationTerminal.iataCode" column="DESTINATION_IATA_CODE"/>
<result property="salesTrip.tripDestinationTerminal.city" column="DESTINATION_CITY_NAME"/>
<collection property="salesTransactionPayments" ofType="SalesTransactionPayment">
<result property="amount" column="AMOUNT"/>
<result property="creditCard.cardNumber" column="CC_NUMBER"/>
<result property="creditCard.nameOnCard" column="CCHOLDER_NAME"/>
</collection>
<collection property="salesTransactionItems" select="getSaleItems" />
</resultMap>
<resultMap id="saleItem" type="com.guestlogix.sale.domain.SalesTransactionItem"
<id property="item" column="ITEM"/>
<result property="price" column="PRICE"/>
<result property="qty" column="QTY"/>
<collection property="salesTransactionTaxRates" resultMap="taxResult" />
</resultMap>
<resultMap id="taxResult" type="com.guestlogix.sale.domain.SalesTransactionTaxRate" autoMapping="true">
<result property="code" column="code"/>
<result property="rate" column="rate"/>
<result property="isFixed" column="isFixed"/>
</resultMap>
关于MyBatis 第二个嵌套列表返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42834396/
1.概述 转载:MyBatis 二级缓存全详解 上一篇文章中我们介绍到了 MyBatis 一级缓存其实就是 SqlSession 级别的缓存,什么是 SqlSession 级别的缓存呢?一级缓存的本质
1.概述 转载:核心配置综述之StatementHandler 2.MyBatis 四大组件之StatementHandler StatementHandler 是四大组件中最重要的一个对象,负责操作
1.概述 转载:MyBatis 启动流程 MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。My
1.概述 转载:MyBatis 基础搭建及架构概述 2.MyBatis 是什么? MyBatis是第一个支持自定义SQL、存储过程和高级映射的类持久框架。MyBatis消除了大部分JDBC的样板代码、
1.概述 转载:核心配置综述之 ParameterHandler MyBatis 四大核心组件我们已经了解到了两种,一个是 Executor ,它是MyBatis 解析SQL请求首先会经过的第一道关卡
1.概述 转载:核心配置综述之 ResultSetHandler 我们之前介绍过了MyBatis 四大核心配置之 Executor、StatementHandler、 ParameterHandler
如果我使用mybatis,我可以很容易地得到更新的行数,就像 update table set desc = 'xxx' where name = ? 但是,如果我想获取更新的行数,而不是计数,我该如
如何在MyBatis 3中使用小于等于 SELECT * FROM( SELECT * FROM TABLE1 WHERE COL1 =#{COL1,jdbc
我将 mybatis3.0.6 与 java 一起使用 哪个性能更好? [select id="getData" parameterType="Integer" resultType="Integer
我无法在 mybatis 中使用动态排序类型创建 SQL,如下例 select user_profile.user_profile_id, user_profile.first_name
这是一个流行的例子。 insert into ACCOUNT ( ACC_ID, ACC_FIRST_NAME, ACC_LAST_NAME, ACC_EMAIL )values (
我下载了MyBatis,文件夹中有一个mybatis-3.0.4-javadoc.jar,我解压并打开它,但它几乎是空的。 哪里可以找到MyBatis的API文档? 最佳答案 http://repo1
我正在尝试为 ArrayList 编写类型处理程序,但这给了我错误,任何人都可以帮助我。 我想将 ArrayList 作为 VARCHAR 存储在数据库中并将其检索为 ArrayList。 packa
目录 依赖 配置 CodeGenerator mybatis-plus-generator + clickhouse 自动生成代码 依赖
目录 三者实现对比 使用fluent mybatis 来实现上面的功能 换成mybatis原生实现效果 换成mybatis plus
例如,我有查询从员工中选择 ID、姓名、年龄、地址,而不是拥有员工对象列表。我希望有一个 map 列表,如 list{ map{ ("id", 123), ("name","jac
我在使 MyBatis (3.4.6) 工作时遇到一些麻烦。 我已将 mybatis-config.xml 文件放置在项目的 src/main/resources 文件夹中,但是当我运行单元测试时,出
我现在使用 Mybatis 和 spring-boot。我没有添加mybatis-config.xml。我根据说明通过 application.properties 为数据源和 mybatis 进行所
这是我的第一篇文章,用我糟糕的英语...... 我使用的是MyBatis3.0 在查询中,我使用 SqlBuilder 的方法如下: public class DataStatisticSqlBuil
主题:MyBatis:Boolean Paraeter:MyBatis 正在使用 Getter 内容: 大家好, 我一直在寻找解决我近乎简单的 MyBatis 问题的方法: 给定代码(仅必要部分):
我是一名优秀的程序员,十分优秀!