Buenos días a todos,
He tenido un problema al realizar un insert con hiberntae y JPA en una base de datos Postgre. Por lo visto, las reglas y las particiones no le gustan a hibernate. Por suerte he conseguido solucionarlo poniendo, en la declaración de la clase con JPA, el insert a pelo.
Os la copio aquí por si alguien tiene el mismo problema o un problema parecido:
Código:
@Entity
@Table(name = "T_LIQ_M_EXT_AGGREGATION")
@SQLInsert(sql = "INSERT INTO T_LIQ_M_EXT_AGGREGATION(cd_dh,cd_distrib,cd_measure_point_type,"
+ "cd_n_tension,cd_prov_sub,cd_tariff,cd_trader,dt_end_effective,dt_start_effective,"
+ "nm_month,nm_year,id_aggregation) "
+ "VALUES "
+ "(?,?,?,?,?,?,?,CAST (? AS TIMESTAMP),CAST (? AS TIMESTAMP),CAST (? AS NUMERIC),CAST (? AS NUMERIC),CAST (? AS NUMERIC))",
check=ResultCheckStyle.NONE)
public class AggregationExt implements Serializable{
private Long idAggregation;
private Long nm_year;
private Long nm_month;
private String codProvSub;
private Timestamp fStartEffective;
private Timestamp fEndEffective;
@Id
@Column(name = "id_aggregation")
@SequenceGenerator(name = "AgregationExtSequence", sequenceName = "seq_ext_aggregation", allocationSize=1)
@GeneratedValue(generator = "AgregationExtSequence", strategy=GenerationType.SEQUENCE)
public Long getIdAggregation() {
return idAggregation;
}
@Column(name = "nm_year")
public Long getNm_year() {
return nm_year;
}
Durante un tiempo, estuve atascado por que el código anterior tampoco me funcionaba, hasta que me dí cuenta que el orden en el que hibernate introducía los parámetros que se iban a insertar, no era el correcto, por lo que no hacía bien los casting. Hibernate coge los campos por orden alfabético, menos la pk que la pone la última.
Y después de este tostón, ahí va mi pregunta. ¿Alguien sabe si existe alguna forma de forzar en hibernate el orden de inserción de los parámetros? Principalmente por que como el día de mañana, a hibernate le dé por cambiar el orden, nos podemos morir para encontrar el error.
Muchas gracias por adelantado y espero haberme explicado bien.