Je suis débutant dans la gestion de JPA avec maven et JBOSS, avec Restful pour faire ma candidature J'ai le problème suivant me survenant en faisant DEPLOY
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: com.company.test_resources_war_1.0-SNAPSHOTPU] Unable to build EntityManagerFactory
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: database.Photo column: fid_module (should be mapped with insert = \ "false \" update = \ "false \") "}}
Pas cette étape, vérifiez toutes les solutions de posles, mais n'avez rien trouvé, quelqu'un peut-il m'aider?
Merci d'avance
Ci-dessous, je montre le code SQL en postgres que j'ai et j'ai fait le mappage.
J'ai trois tableaux (activité, événement et photo) où l'un d'eux (photo) fait référence à l'autre deux (activité et événement) mais dans une seule colonne (photo.fid_module)
Code SQL (base de données d'enginer -> Postgresql):
CREATE TABLE activity (
id_activity integer not null,
name character varying(150),
description text,
CONSTRAINT id_activity_pk PRIMARY KEY (id_activity)
)
CREATE TABLE event (
id_event integer not null,
name character varying(150),
description text,
date timestamp without time zone,
CONSTRAINT id_event_pk PRIMARY KEY (id_event)
)
CREATE TABLE photo(
id_photo integer not null,
path character varying(150),
fid_module integer not null,
CONSTRAINT id_photo_pk PRIMARY KEY (id_photo),
CONSTRAINT fk_photo_activity FOREIGN KEY (fid_module)
REFERENCE activity (id_activity) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_photo_event FOREIGN KEY (fid_module)
REFERENCE event (id_event) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
Maintenant, le mappage que j'ai fait avec l'aide de Netbenas et m'a donné le code suivant (j'ai fait le mappage pour les trois tables, mais en me présentant le problème est dans la classe Photo.Java).
@Entity
@Table(name = "photo")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "photo.findAll", query = "SELECT p FROM Photo p"),
@NamedQuery(name = "photo.findByFidPhoto", query = "SELECT p FROM Photo p WHERE p.fidphoto = :fidphoto"),
@NamedQuery(name = "photo.findByIdPhoto", query = "SELECT p FROM Photo p WHERE p.idphoto = :idphoto")})
public class Photo implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id_photo")
private Integer idPhoto;
@Column(name = "path")
private Recurso fidPath;
@JoinColumn(name = "fid_module", referencedColumnName = "id_activity")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private SliderWebHome fidModule;
@JoinColumn(name = "fid_module", referencedColumnName = "id_event")
@ManyToOne(optional = false, fetch = FetchType.LAZY)
private Publicacion fidModule1;
public ModuloRecurso() {
}
.......
}
J'utilise JPA pour la persistance (mais faites une installation propre de mvn et mvn jboss-as: deploy plusieurs me tirent des dépendances d'hibernation) quelqu'un pourrait-il me dire quelle est mon erreur ou pourrait résoudre ce problème. Je vous remercie.
Comme indiqué dans une autre réponse, votre code Java spécifie le même nom de colonne de jointure pour deux champs, ce qui ne peut pas fonctionner.
Si ce code Java est généré par un outil de mappage netbeans, comme il semble d'après votre note
Maintenant, le mappage que j'ai fait avec l'aide de Netbenas et m'a donné le code suivant ...
le mauvais Java est probablement dû à une mauvaise combinaison de contraintes dans votre SQL.
Vous avez dans votre définition de la table photo
:
CONSTRAINT fk_photo_activity FOREIGN KEY (fid_module)
REFERENCE activity (id_activity) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk_photo_event FOREIGN KEY (fid_module)
REFERENCE event (id_event) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
qui tente de rendre la colonne fid_module
une clé étrangère référençant activity
et également une clé étrangère référençant event
, qui ne peut pas fonctionner.
Si vous avez besoin de clés étrangères de photo
vers ces deux tables, vous devrez utiliser deux colonnes différentes.
Vous avez deux colonnes mappées avec le même nom
@JoinColumn(name = "fid_module", referencedColumnName = "id_activity")
@JoinColumn(name = "fid_module", referencedColumnName = "id_event")
Modifiez l'un des attributs de nom!
En regardant dans votre exception, vous pouvez lire:
Repeated column in mapping for entity