Pregunta

Tengo algunos problemas con un mapeo en MyBatis para Java y agradecería algo de ayuda. Mi estructura de clase es la siguiente:

//Getters/setters omitted for clarity

class Foo 
{
  int id;
  Bar bar;
}

class Bar {
  String x;
  int y;
}

Mi mesa se ve así, es decir, se desasormaliza de la estructura de la clase.

create table foo_bar (
  id int,
  x varchar,
  y int
);

Mi instrucción de inserción de trabajo puede desormalizar el uso de parámetros (bar.x, bar.y).

<insert id="insert" parameterType="foo">
  <![CDATA[
    insert into foo_bar
    (id, x, y) values
    (#{x}, #{bar.x}, #{bar.y})
  ]]>
</insert>

Entonces, el problema:

Cuando ejecuto mi selección, me gustaría que el objeto resultante sea una instancia de Foo que tenga una referencia a la barra.

No creo que pueda usar un controlador de tipo, ya que esto funciona en una sola columna, y la asociación no parece tener sentido ya que 'Bar' no es una entidad explícitamente representada en la base de datos a través de una relación clave extranjera.

¿Alguien puede mostrarme la forma recomendada de hacer esto, por favor?

¡Gracias!

¿Fue útil?

Solución

¿Ha intentado usar la definición de resultados de resultados en su Ibatis SQLMAP?

<resultMap id="foobar-result" class="Foo">
    <result property="id" column="id"/>
    <result property="bar.x" column="x"/>
    <result property="bar.y" column="y"/>
</resultMap>

y luego en su SQL solo haga referencia al resultado de resultados:

<select id="getFooBar" resultMap="foobar-result">
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top