Bonjour, j'utilise la version Hibernate 3.3.1 GA, la version Java 1.7 et une base de donée Postgresql 9.1.
Voici le problème : je dois insérer des valeurs null et non null dans un champ qui a une relation unidirectionnelle Many To One et ça ne fonctionne pas, j'obtiens l'erreur suivante :
java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before merging: i2.application.sapc.integration.entities.referentiel.SecteurEntity.
J'ai essayé de rajouter l'option nullable=true sur le champ ID_SECTEUR_CHANTIER mais j'obtiens toujours la même erreur.
Voici la classe en question RestrictionEntity :
/** * Getter pour secteurChantier. * @return secteurChantier */ @JoinColumn(name = "ID_SECTEUR_CHANTIER") @ManyToOne(targetEntity = SecteurEntity.class) @Override @NotFound(action = NotFoundAction.IGNORE) public Secteur getSecteurChantier() { return secteurChantier; }
la classe Secteur Entity
/** * Getter pour axeSecteur. * @return axeSecteur */ @OneToMany(targetEntity = AxeSecteurEntity.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "SECTEUR_ID") @Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE, org.hibernate.annotations.CascadeType.MERGE, org.hibernate.annotations.CascadeType.PERSIST, org.hibernate.annotations.CascadeType.DELETE_ORPHAN }) @JSON(deserialize = false, serialize = false) public Set<AxeSecteur> getAxeSecteur() { if (axeSecteur == null) { axeSecteur = new HashSet<>(); } return axeSecteur; }
la classe AxeSecteurEntity
/** * Getter pour secteur. * @return secteur */ @ManyToOne(fetch = FetchType.LAZY, targetEntity = SecteurEntity.class) @JoinColumn(name = "SECTEUR_ID") public Secteur getSecteur() { return secteur; }
Voici la table restriction :
-- Table: sapc.sapc_restriction
CREATE TABLE sapc.sapc_restriction ( discriminator character varying(50) NOT NULL, id bigint NOT NULL, date_creation timestamp without time zone, datedebut timestamp without time zone, datefin timestamp without time zone, date_modification timestamp without time zone, libelle character varying(255), ager character varying(255), axe_externe character varying(255), axe integer, departement character varying(255), gene character varying(255), levee character varying(255), mode_exploitation character varying(255), nombre_voies_gauche integer, nombre_voies_droite integer, periode character varying(255), pr_debut integer, pr_debut_distance integer, pr_fin integer, pr_fin_distance integer, sens character varying(5), type_localisation character varying(255), beneficiaire character varying(255), beneficiaires_indirect character varying(2000), date_debut_chantier timestamp without time zone, date_debut_restriction_2 timestamp without time zone, date_fin_chantier timestamp without time zone, date_fin_restriction_2 timestamp without time zone, demandeur character varying(255), interventions_autorisees boolean, nature_traveaux character varying(255), commentaire character varying(2000), statut character varying(255), statut_2 character varying(255), ext_geom geometry, id_secteur bigint, utilisateur_createur_id bigint, utilisateur_modificateur_id bigint, transmis_sytadin boolean, transmis_sirius boolean, entite_responsable bigint, entite_responsable_2 bigint, axe_chantier bigint, pr_debut_chantier integer, pr_fin_chantier integer, sens_chantier character varying(255), id_secteur_chantier bigint, date_derniere_transmission_sytadin timestamp without time zone, date_derniere_transmission_sirius timestamp without time zone, est_copie boolean, longue_duree boolean, id_pgt integer, arrete_specifique boolean, CONSTRAINT sapc_restriction_pkey PRIMARY KEY (id ), CONSTRAINT fk_entite_responsable FOREIGN KEY (entite_responsable) REFERENCES sapc.sapc_equipe (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT fk_entite_responsable_2 FOREIGN KEY (entite_responsable_2) REFERENCES sapc.sapc_equipe (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT sapc_createur_fr FOREIGN KEY (utilisateur_createur_id) REFERENCES sapc.sapc_utilisateur (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT sapc_modificateur_fr FOREIGN KEY (utilisateur_modificateur_id) REFERENCES sapc.sapc_utilisateur (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT enforce_dims_sapc_restriction CHECK (st_ndims(ext_geom) = 2), CONSTRAINT enforce_srid_sapc_restriction CHECK (st_srid(ext_geom) = 27572) ) WITH ( OIDS=FALSE );
la table Secteur :
CREATE TABLE sapc.sapc_secteur ( id bigint NOT NULL, libelle character varying(255), CONSTRAINT sapc_secteur_pkey PRIMARY KEY (id ) )
la table Axe Secteur :
CREATE TABLE sapc.sapc_axe_secteur ( id bigint NOT NULL, axe_id bigint, secteur_id bigint, CONSTRAINT sapc_axe_secteur_pkey PRIMARY KEY (id ), CONSTRAINT sapc_sect_axe_axe_fk FOREIGN KEY (axe_id) REFERENCES sapc.sapc_axe (id_axe) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE, CONSTRAINT sapc_sect_axe_sect_fk FOREIGN KEY (secteur_id) REFERENCES sapc.sapc_secteur (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE )
J'ai meme tenté de remplacer la relation @Many To One par l'Annotation Column mais l'objet secteurChantier renvoie <stream of 176 bytes> au lieu de renvoyer null
j'oubliais le composant qui correspond à ce champ dans le formulaire de saisie est une liste déroulante :
<sj:select dataType="json" id="listeSecteursChantier" href="%{urlAjouterDemande}" emptyOption="true" onChangeTopics="selectionSectionChantier" onCompleteTopics="selectionSectionChantier" label="%{getText('gestion.restrictionType.secteur')}" name="restrictionDTO.idSecteurChantier" list="secteursChantier" listKey="id" listValue="libelle" />
|