Página principal de Grupos de Google
Ayuda | Acceder
Mensaje del debate org.hibernate.TransientObjectE xception: object references an unsaved transient instance - save the transient instance before flushing:
El grupo al cual envías entradas es un grupo Usenet. Si envías mensajes a este grupo, cualquier usuario de Internet podrá ver tu dirección de correo electrónico
Tu respuesta no se ha enviado.
Tu entrada aparecerá cuando los moderadores la hayan aprobado.
Ivan B  
Ver perfil
 Más opciones 12 feb, 17:31
De: Ivan B <ibo...@gmail.com>
Fecha: Tue, 12 Feb 2008 15:31:19 -0800 (PST)
Local: Mart 12 feb 2008 17:31
Asunto: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing:
Hi,

I have 3 classes defined as such (I am leaving out getters and
setters:

@Entity
@Table(name = "ClassA")
public class ClassA {
        @Id
        @GeneratedValue
        @Column(name = "CLASSA_ID")
        private long id;

        private String data;

        @org.hibernate.annotations.CollectionOfElements
        @JoinTable(name = "CLASSA_MEMBERS", joinColumns = @JoinColumn(name =
"CLASSA_ID"))
        private Set<ClassB> children = new HashSet<ClassB>(0);

        @org.hibernate.annotations.CollectionOfElements
        @JoinTable( name = "CLASSC_MEMBERS", joinColumns = @JoinColumn(name =
"CLASSA_ID"))
        @Cascade( {org.hibernate.annotations.CascadeType.SAVE_UPDATE,
                           org.hibernate.annotations.CascadeType.PERSIST} )
        private Set<ClassC> children2 = new HashSet<ClassC>(0);

}

@Embeddable
public class ClassB {
        @Parent
        private ClassA parent;

        private String data;

}

@Entity
@Table(name = "ClassC")
public class ClassC {

        @Id
        @GeneratedValue
        @Column(name = "CLASSC_ID")
        private long id;

        private String data;

}

If I execute this code I get the above (re: subject) error.

@Test
        public void testCreateClassA() {
                Random rnd = new Random();
                Transaction tx = session.beginTransaction();

                Set<ClassB> set = new HashSet<ClassB>(0);
                for (int i = 0; i < 10; i++) {
                        ClassB child = new ClassB(String.valueOf(i));
                        set.add(child);
                }

                Set<ClassC> set2 = new HashSet<ClassC>(0);
                for (int i = 0; i < 10; i++) {
                        ClassC child = new ClassC(String.valueOf(i));
                        set2.add(child);
//                      session.save(child);
                }

                ClassA clazz = new ClassA(String.valueOf(rnd.nextInt()), set);
                clazz.setChildren2(set2);
                session.save(clazz);
                tx.commit();
        }

If I remove the commented out line in my @Test everything works fine.
Why do I have to do this? I thought that @Cascade annotation should
take care of the problem?


    Responder al autor    Reenviar  
Debes registrarte antes de enviar mensajes.
Para enviar una entrada, antes deberás formar parte del grupo.
Antes de enviar entradas, actualiza tu alias en la configuración de la suscripción.
No dispones del permiso necesario para enviar entradas.

Crear un grupo - Grupos de Google - Página principal de Google - Condiciones del servicio - Política de privacidad
©2008 Google