Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

hibernate y postgres

Estas en el tema de hibernate y postgres en el foro de PostgreSQL en Foros del Web. Tengo una tabla empresa con su id: @Id @Generated(GenerationTime.INSERT) @Column(name = "id", columnDefinition = "serial") @GeneratedValue(strategy = GenerationType.SEQUENCE) public Integer getId() { return id; } ...
  #1 (permalink)  
Antiguo 17/03/2011, 02:38
 
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 352
Antigüedad: 15 años, 6 meses
Puntos: 5
hibernate y postgres

Tengo una tabla empresa con su id:
@Id
@Generated(GenerationTime.INSERT)
@Column(name = "id", columnDefinition = "serial")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
public Integer getId() {
return id;
}

Y luego una tabla periodo que tira de empresa:

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "idEmpresa")
public Empresa getEmpresa() {
return empresa;
}

Las tablas las genera automaticamente hibernate. El caso que me genera en la tabla periodo:

idempresa serial NOT NULL,
CONSTRAINT fk3b005ad27bb59770 FOREIGN KEY (idempresa)
REFERENCES sgd.mempresa (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION

Me hacer de tipo serial en vez de intenger, no si eso esta bien. Y lo que me hace es ponerlo a not null, cuando necesito que pueda ser null.
Alguien me puede indicar que estoy haciendo mal.
Gracias.
  #2 (permalink)  
Antiguo 20/03/2011, 15:12
Avatar de dackiller  
Fecha de Ingreso: septiembre-2003
Ubicación: The Matrix
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: hibernate y postgres

jlgarcia1977

Creo que este post deberia estar en Java, sin embargo, creo que el resultado es lo esperado.

Estas haciendo una relación entre 2 tablas las cuales tienes una clave foranea y para que eso funcione, necesitas obligatoriamente un campo de clave primaria.

En Postgresql como el Oracle, se usan secuencias para generar estos campos que llamamos con frecuencia "ID".

Hibernate te esta creando el campo serial que vendria siendo el campo auto-incrementable de MySql, y este es generado a través de una funcion llamada secuencia. Además como estas usando el campo idempresa para identificar un registro de otra tabla, es necesario un dato que no puede ser NULL ya que estarias rompiendo la integridad de datos entre las tablas.

Te sugiero pienses un poco mejor tu estructura de base de datos y evitar futuros problemas con hibernate.

Saludos.
__________________
--
NOTA: Si haz conseguido la solución a tu problema, por favor edita el titulo del tema colocando el prefijo [SOLUCIONADO], para que otros usuarios puedan encontrar soluciones más rápido.

Etiquetas: hibernate, postgres
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:53.