2010-11-26 20 views
7

tengo clases POJO:Persistir colección de objetos con MyBatis

class Ticket { 
    private int id; 
    private double cost; 
    private Date time; 
    private List<Place> places; 

    // Getters and setters here 
} 

class Place { 
    private int row; 
    private int place; 

    // Getters and setters here 
} 

A continuación, se crea un boleto y algunos lugares:

Ticket ticket = new Ticket(); 
ticket.setCost(58.7); 
ticket.setTime(new Date()); 

Place place1 = new Place(); 
place1.setRow(1); 
place1.setPlace(2); 
ticket.addPlace(place1); 

Place place2 = new Place(); 
place2.setRow(3); 
place2.setPlace(4); 
ticket.addPlace(place2); 

y ahora quiero que lo guarde en DB:

session.insert("insertTicket", ticket); 
session.commit(); 

En MapperConfig.xml Escribo estas líneas:

<insert id="insertTicket" parameterType="Ticket"> 
    INSERT INTO tickets (cost, time) VALUES (#{cost}, #{time}) 
</insert> 

¿Cómo puedo guardar Enumerar lugares en modo automático? ¿MyBatis puede guardarlo para mí? O necesito iterar manualmente con foreach e insertar cada Place a mano?

Gracias por cualquier ayuda.

Respuesta

9

Aunque MyBatis puede soportar la dirección inversa (es decir, llenar la lista durante una consulta con una selección anidada o desde una combinación), no hay un modo automático que inserte la lista que contiene en la base de datos.

De acuerdo con este Google Groups discussion tiene que insertar los elementos de lista manualmente.

+0

Hm. No es bueno ... Creo que MyBatis es más inteligente. ¿Existe ORM para Java que pueda hacer esta operación por mí? –

+6

MyBatis realmente _es_ inteligente. Pero no está destinado a ser un ORM. Solo se trata de una capa delgada alrededor de JDBC. Si esta funcionalidad es un requisito, entonces puede buscar un ORM como Hibernate http://www.hibernate.org/ o EclipseLink http://www.eclipse.org/eclipselink/. – vanje

+0

Gracias, leeré al respecto. –

Cuestiones relacionadas