Java - Consulta en Hibernate

 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Consulta en Hibernate

Publicado por Jorge (6 intervenciones) el 30/01/2020 18:54:56
Estoy utilizando Java Hibernate con la base de datos en H2. La base de datos tiene una tabla Trabajador y otra Capacitacion con una relación de muchos a muchos. Para añadir datos a estas tablas cuando estos no existen todo me sale bien, se introducen perfectamente. Pero yo necesito introducir la Capacitacion de un trabajador existente, o unir una Capacitacion existente a un Trabajador existente.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Franklin
Val: 456
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Consulta en Hibernate

Publicado por Franklin (179 intervenciones) el 30/01/2020 20:03:22
facilita mucho cuando proporcionas información como fracción del código y el error. Para ver como estas trabajando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 12
Ha aumentado su posición en 7 puestos en Java (en relación al último mes)
Gráfica de Java

Consulta en Hibernate

Publicado por Jorge (6 intervenciones) el 07/02/2020 15:22:11
Esta es mi clase Trabajador

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
@Entity
@Table(name = "trabajador")
public class Trabajador implements Serializable {
 
    @Id
    @NotNull
    private String id;
 
    @Column(nullable = false)
    private String nombre;
 
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Grupo grupo;
 
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Capacitacion> capacitacions = new ArrayList<>();
 
    public Trabajador() {
    }
 
    public Trabajador(String id) {
        this.id = id;
    }
 
    public void addCapacitacion(Capacitacion cap) {
        this.capacitacions.add(cap);
    }
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getNombre() {
        return nombre;
    }
 
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
 
    public List<Capacitacion> getCapacitacions() {
        return capacitacions;
    }
 
    public void setCapacitacions(List<Capacitacion> capacitacions) {
        this.capacitacions = capacitacions;
    }
 
    public Trabajador(String id, String nombre, Grupo grupo) {
        this.id = id;
        this.nombre = nombre;
        this.grupo = grupo;
    }
 
    public Grupo getGrupo() {
        return grupo;
    }
 
    public void setGrupo(Grupo grupo) {
        this.grupo = grupo;
    }
 
}

Y mi clase Capacitacion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
@Entity
@Table(name = "capacitacion")
public class Capacitacion implements Serializable {
 
    @Id
    @NotNull
    private String acciones;
    private boolean cumplimiento;
    private String trimestre;
    private String tipo_Accion;
 
    @Id
    @NotNull
    @Temporal(TemporalType.DATE)
    private Date fInicio;
 
    @Temporal(TemporalType.DATE)
    private Date fFinal;
 
    @ManyToMany(mappedBy = "capacitacions")
    private List<Trabajador> trabajadors = new ArrayList<>();
 
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Lugar lugar;
 
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Modo_formacion modo_formacion;
 
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Responsable responsable;
 
    public Capacitacion() {
    }
 
    public Capacitacion(String acciones, boolean cumplimiento, String trimestre, String tipo_Accion, Date fInicio, Date fFinal, Lugar lugar, Modo_formacion modo_formacion, Responsable responsable) {
        this.acciones = acciones;
        this.cumplimiento = cumplimiento;
        this.trimestre = trimestre;
        this.tipo_Accion = tipo_Accion;
        this.fInicio = fInicio;
        this.fFinal = fFinal;
        this.lugar = lugar;
        this.modo_formacion = modo_formacion;
        this.responsable = responsable;
    }
 
    public void addTrabajador(Trabajador trabajador) {
        this.trabajadors.add(trabajador);
        trabajador.addCapacitacion(this);
    }
 
    public String getAcciones() {
        return acciones;
    }
 
    public void setAcciones(String acciones) {
        this.acciones = acciones;
    }
 
    public boolean isCumplimiento() {
        return cumplimiento;
    }
 
    public void setCumplimiento(boolean cumplimiento) {
        this.cumplimiento = cumplimiento;
    }
 
    public String getTrimestre() {
        return trimestre;
    }
 
    public void setTrimestre(String trimestre) {
        this.trimestre = trimestre;
    }
 
    public String getTipo_Accion() {
        return tipo_Accion;
    }
 
    public void setTipo_Accion(String tipo_Accion) {
        this.tipo_Accion = tipo_Accion;
    }
 
    public List<Trabajador> getTrabajadors() {
        return trabajadors;
    }
 
    public void setTrabajadors(List<Trabajador> trabajadors) {
        this.trabajadors = trabajadors;
    }
 
    public Date getfInicio() {
        return fInicio;
    }
 
    public void setfInicio(Date fInicio) {
        this.fInicio = fInicio;
    }
 
    public Date getfFinal() {
        return fFinal;
    }
 
    public void setfFinal(Date fFinal) {
        this.fFinal = fFinal;
    }
 
    public Lugar getLugar() {
        return lugar;
    }
 
    public void setLugar(Lugar lugar) {
        this.lugar = lugar;
    }
 
    public Modo_formacion getModo_formacion() {
        return modo_formacion;
    }
 
    public void setModo_formacion(Modo_formacion modo_formacion) {
        this.modo_formacion = modo_formacion;
    }
 
    public Responsable getResponsable() {
        return responsable;
    }
 
    public void setResponsable(Responsable responsable) {
        this.responsable = responsable;
    }
 
}

para inserta utilizo el siguiente código

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Trabajador t = new Trabajador("88010565413", "Dulce", null);
        Lugar lugar = new Lugar("CMPSS");
        Modo_formacion modo_formacion= new Modo_formacion("SEM");
        Responsable r = new Responsable("Director");
        String sDate1 = "Mayo-2019";
        String sDate2 = "Septiembre-2019";
        Date date = new SimpleDateFormat("MMMM-yyyy").parse(sDate1);
        Date date2 = new SimpleDateFormat("MMMM-yyyy").parse(sDate2);
 
        Capacitacion c = new Capacitacion("Autopreparación JavaScript", true, "1er Trimestre", "plan", date, date2, lugar, modo_formacion, r);
 
        c.addTrabajador(t);
        Session sesion = HibernateUtil.getSessionFactory().openSession();
        sesion.beginTransaction();
        sesion.persist(t);
        sesion.getTransaction().commit();
        sesion.close();

Pero ese trabajador ya existe en la BD y quiero unirlo a esa Capacitacion pero me da el siguiente error:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
ERROR: HHH000388: Unsuccessful: alter table trabajador_capacitacion add constraint FK_d3fp2pnqnisbys48qky2q7xn5 foreign key (capacitacions_fInicio, capacitacions_acciones) references capacitacion
feb 07, 2020 1:59:14 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
ERROR: Violación de una restricción de Integridad Referencial: "FK_D3FP2PNQNISBYS48QKY2Q7XN5: PUBLIC.TRABAJADOR_CAPACITACION FOREIGN KEY(CAPACITACIONS_FINICIO, CAPACITACIONS_ACCIONES) REFERENCES PUBLIC.CAPACITACION(FINICIO, ACCIONES)"
Referential integrity constraint violation: "FK_D3FP2PNQNISBYS48QKY2Q7XN5: PUBLIC.TRABAJADOR_CAPACITACION FOREIGN KEY(CAPACITACIONS_FINICIO, CAPACITACIONS_ACCIONES) REFERENCES PUBLIC.CAPACITACION(FINICIO, ACCIONES)"; SQL statement:
alter table trabajador_capacitacion add constraint FK_d3fp2pnqnisbys48qky2q7xn5 foreign key (capacitacions_fInicio, capacitacions_acciones) references capacitacion [23506-189]
feb 07, 2020 1:59:14 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
Hibernate: insert into trabajador (grupo_nombregrupo, nombre, id) values (?, ?, ?)
feb 07, 2020 1:59:14 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 23505, SQLState: 23505
feb 07, 2020 1:59:14 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Violación de indice de Unicidad ó Clave primaria: "PRIMARY_KEY_1 ON PUBLIC.TRABAJADOR(ID) VALUES ('Magyana', 16)"
Unique index or primary key violation: "PRIMARY_KEY_1 ON PUBLIC.TRABAJADOR(ID) VALUES ('Magyana', 16)"; SQL statement:
insert into trabajador (grupo_nombregrupo, nombre, id) values (?, ?, ?) [23505-189]
feb 07, 2020 1:59:14 PM org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl release
INFO: HHH000010: On release of batch it still contained JDBC statements
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: could not execute statement
	at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:129)
	at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
	at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:190)
	at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:62)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3124)
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3587)
	at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:103)
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:453)
	at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:345)
	at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:350)
	at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:56)
	at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1218)
	at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:421)
	at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
	at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
	at capacitacion.NewMain.main(NewMain.java:73)
Caused by: org.h2.jdbc.JdbcSQLException: Violación de indice de Unicidad ó Clave primaria: "PRIMARY_KEY_1 ON PUBLIC.TRABAJADOR(ID) VALUES ('Magyana', 16)"
Unique index or primary key violation: "PRIMARY_KEY_1 ON PUBLIC.TRABAJADOR(ID) VALUES ('Magyana', 16)"; SQL statement:
insert into trabajador (grupo_nombregrupo, nombre, id) values (?, ?, ?) [23505-189]
	at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
	at org.h2.message.DbException.get(DbException.java:179)
	at org.h2.message.DbException.get(DbException.java:155)
	at org.h2.index.BaseIndex.getDuplicateKeyException(BaseIndex.java:102)
	at org.h2.mvstore.db.MVSecondaryIndex.checkUnique(MVSecondaryIndex.java:231)
	at org.h2.mvstore.db.MVSecondaryIndex.add(MVSecondaryIndex.java:190)
	at org.h2.mvstore.db.MVTable.addRow(MVTable.java:704)
	at org.h2.command.dml.Insert.insertRows(Insert.java:156)
	at org.h2.command.dml.Insert.update(Insert.java:114)
	at org.h2.command.CommandContainer.update(CommandContainer.java:78)
	at org.h2.command.Command.executeUpdate(Command.java:253)
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(JdbcPreparedStatement.java:157)
	at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPreparedStatement.java:143)
	at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:187)
	... 13 more
BUILD STOPPED (total time: 32 seconds)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar