1

再会

我有一个复杂的模型(ddd),我想使用 ibatis 进行映射。

我的模型如下:

class A {
 int id;
 String title;
 List <B> b;
}

abstract class B {
 int id;
 String title;
 List <C> f;
 int type;
}

class BA extends B {

 BA() {
  setType(1);
 }
}

class BB extends B {

  BB {
   setType(2);
  }
}

我当前的 XML 映射:

<sqlMap namespace="ABC">

  <resultMap id="aResult" class="A" groupBy="a_id">
    <result property="id" column=""a_id" />
    <result property="title" column="a_title" />
    <result property="b" resultMap="ABC.bResult" />
</resultMap> 

<resultMap id="bResult" class="java.util.HashMap">       
   <discriminator javaType="java.lang.Integer" column="b_type">
      <subMap value="1" resultMap="baResult" />
      <subMap value="2" resultMap="bbResult" />
   </discriminator>
</resultMap>

<resultMap id="baResult" class="BA">
  <result property="id" column="b_id" />
  <result property="title" column="b_title" />
</resultMap>

<resultMap id="bbResult" class="BB">
  <result property="id" column="b_id" />
  <result property="title" column="b_title" />
</resultMap>

<select id="aselect" resultMap="aResult">
select a.id as 'a_id', a.title as 'a_title', b.id as 'b_id', b.title as 'b_title', b.type as 'b_type'
from aa a left join bb b on a.id = b.aid
</select>

aa (
id int not null primary key,
title varchar(50) not null
)

bb (
id int not null primary key,
aid int not null,
title varchar(50) not null
type int not null
)

继承正在工作,但它只在 A(以太 BA 或 BB)事件中返回一个,尽管 b 是一个列表,并且 b(BA,BB)有多行你能帮我吗?

使用 BA 和 BB 类的原因是它们包含单独的业务逻辑(根据 DDD)。

我正在为 java 使用 ibatis 2.3.4.726

4

2 回答 2

2

我想我找到了问题,映射是错误的。当它尝试这个时:

<resultMap id="aResult" class="A" groupBy="id">

有效。

于 2009-06-12T06:07:30.960 回答
0

约翰,我认为没有足够的信息继续下去。

当您手动运行 SQL 查询时,您究竟会得到什么,您会得到多个结果行吗?也许您真的只得到一个结果行,它将映射到一个包含 List<B> 的单个 A,其中包含 BA 或 BB。

你能向我们展示你用来通过这个查询调用 iBatis 的 Java 代码吗?如果你说 queryForObject(),你只会得到一个顶级 A,而 queryForList() 会给你一个 List<A>。这听起来不像你的问题,但也许它是部分答案。

您的 SQL(缺少逗号)和 SQL Map(双引号)中有错误,但我认为这些是输入错误。

我认为您的 Java 结果对象需要是 JavaBeans,因此必须具有 get/set 方法,您没有在上面显示。但如果这是问题所在,我希望你不会取回任何数据。

于 2009-06-01T03:50:32.417 回答