Possuo uma isntância de Calendario contendo um a id composta que onde um dos atributos é um periodo.
Caso o periodo ainda não exista, gostaria de inseri-lo em cascata.
@Entity
@Table(name = "calendario_aprop_mao_obra", schema = "amo")
public class Calendario implements Serializable {
@EmbeddedId
private CalendarioID comp_id;
(...)
}
@Embeddable
public class CalendarioID implements Serializable {
@ManyToOne(fetch = FetchType.EAGER)
@Cascade(value = {CascadeType.PERSIST})
@JoinColumn(name = "ano_mes_calamo", nullable = false)
private Periodo periodo;
@ManyToOne
@JoinColumn(name = "num_etapa_calamo", nullable = false)
private Etapa etapa;
(...)
}
@Entity
@Table(name = "periodo_aprop_mao_obra", schema = "amo")
public class Periodo implements Serializable {
@Id
@Column(name = "ano_mes_peramo", nullable = false)
private Integer id;
(...)
}
Ao persistir, tenho recebido a seguinte exceção:
14:37:00,035 DEBUG [SQL]
insert
into
amo.calendario_aprop_mao_obra
(data_inic_calamo, data_fim_calamo, ano_mes_calamo, num_etapa_calamo)
values
(?, ?, ?, ?)
14:37:00,082 TRACE [TimestampType] binding '2009-07-15 14:36:59' to parameter: 1
14:37:00,082 TRACE [TimestampType] binding '2009-07-15 14:36:59' to parameter: 2
14:37:00,082 TRACE [IntegerType] binding '200907' to parameter: 3
14:37:00,082 TRACE [IntegerType] binding '1' to parameter: 4
14:37:00,160 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: null
14:37:00,160 ERROR [JDBCExceptionReporter] Entrada em lote 0 insert into amo.calendario_aprop_mao_obra (data_inic_calamo,
data_fim_calamo, ano_mes_calamo, num_etapa_calamo) values (2009-07-15 14:36:59.925000 -03:00:00, 2009-07-15 14:36:59.925000
-03:00:00, 200907, 1) foi abortada. Chame getNextException para ver a causa.
14:37:00,160 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: 23503
14:37:00,160 ERROR [JDBCExceptionReporter] ERROR: insert or update on table "calendario_aprop_mao_obra" violates foreign key
constraint "r_peramo_calamo"
Detalhe: Key (ano_mes_calamo)=(200907) is not present in table "periodo_aprop_mao_obra".
14:37:00,160 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
Gostaria bastante de poder usar o @Cascade, estou me batendo a algum tempo e não consigo enxergar onde está o erro.