2009-05-28 4 views
1

Guten TagIbatis Vererbung und eine zu viele

Ich habe ein komplexes Modell (ddd), die ich mit Ibatis zuordnen möchte.

Mein Modell ist wie folgt:

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); 
    } 
} 

Mein aktuelles XML-Mapping:

<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> 

Tabellen

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 
) 

Die Vererbung funktioniert, aber es gibt nur eine in A (Äther BA oder BB) Event obwohl b ist eine Liste und es gibt mehrere Zeilen für b (BA, BB) Könnten Sie mir bitte helfen?

Der Grund für die Verwendung der BB & BB-Klassen ist, dass diese die separate Geschäftslogik (gemäß DDD) enthalten.

I ibatis 2.3.4.726 für java

Antwort

0

Johan bin mit, ich glaube nicht, dass es genug Informationen ist auf zu gehen.

Was genau erhalten Sie, wenn Sie die SQL-Abfrage manuell ausführen, erhalten Sie mehrere Ergebniszeilen? Vielleicht erhalten Sie wirklich nur eine Ergebniszeile, die auf ein einzelnes A mit einer Liste <B> mit entweder einem BA oder einem BB in ihm abgebildet würde.

Können Sie uns den Java-Code zeigen, mit dem Sie iBatis mit dieser Abfrage aufrufen? Wenn Sie queryForObject() sagen, erhalten Sie nur eine oberste Ebene A, während queryForList() Ihnen eine Liste <A> gibt. Das hört sich nicht nach deinem Problem an, aber vielleicht ist es eine teilweise Antwort.

Es gibt Fehler in Ihrem SQL (fehlendes Komma) und Ihre SQL Map (doppelte Anführungszeichen), aber ich nehme an, dass diese Tippfehler sind.

Ihre Java-Ergebnisobjekte, die ich glaube, müssen JavaBeans sein, und müssen daher Methoden haben, die Sie oben nicht zeigen. Aber wenn das das Problem wäre, würde ich erwarten, dass Sie keine Daten zurückbekommen.

2

Ich glaube, ich habe das Problem gefunden, die Zuordnung ist falsch. Als es das versuchte:

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

Es funktionierte.

Verwandte Themen