Malgré tous les autres articles, je ne trouve pas de solution à cette erreur avec GlassFish, sur MacOSX, NetBeans 7.2.
Here the error :
SEVERE: Exception while invoking class org.glassfish.persistence.jpa.JPADeployer
prepare method
SEVERE: Exception while preparing the app
SEVERE: [PersistenceUnit: supmarket] Unable to build EntityManagerFactory
...
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity:
com.supmarket.entity.Sale column: customerId
(should be mapped with insert="false" update="false")
Voici le code:
Sale.java
@Entity
public class Sale {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable=false)
private Long idFromAgency;
private float amountSold;
private String agency;
@Temporal(javax.persistence.TemporalType.DATE)
private Date createdate;
@Column(nullable=false)
private Long productId;
@Column(nullable=false)
private Long customerId;
@ManyToOne(optional=false)
@JoinColumn(name="productId",referencedColumnName="id_product")
private Product product;
@ManyToOne(optional=false)
@JoinColumn(name="customerId",referencedColumnName="id_customer")
private Customer customer;
public void Sale(){}
public void Sale(Long idFromAgency, float amountSold, String agency
, Date createDate, Long productId, Long customerId){
...
}
// then getters/setters
}
Customer.java
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id_customer")
private Long id_customer;
@Column(nullable=false)
private Long idFromAgency;
private String gender,
maritalState,
firstname,
lastname,
incomeLevel;
@OneToMany(mappedBy="customer",targetEntity=Sale.class, fetch=FetchType.EAGER)
private Collection sales;
public void Customer(){}
public void Customer(Long idFromAgency, String gender, String maritalState,
String firstname, String lastname, String incomeLevel) {
...
}
}
Product.java
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="id_product")
private Long id_product;
@Column(nullable=false)
private Long idFromAgency;
private String name;
@OneToMany(mappedBy="product",targetEntity=Sale.class, fetch=FetchType.EAGER)
private Collection sales;
//constructors + getters +setters
}
hibernate
jakarta-ee
mappingexception
canardman
la source
la source
customerId
? (par exemple à partir de JSON).Customer customer = entityManager.getReference(customerId, Customer.class); sale.setCustomer(customer);
@EmbeddedId
clé composite entrecustomerId
et un autre champ de laCustomer
classe? Dans ce cas, j'ai besoin des deux colonnes répétées dans le mappage, ai-je raison?@MapsId("customerId")
, voir stackoverflow.com/questions/16775055/hibernate-embeddedid-joinSi vous êtes coincé avec une base de données héritée sur laquelle quelqu'un a déjà placé des annotations JPA mais n'a PAS défini les relations et que vous essayez maintenant de les définir pour les utiliser dans votre code, vous ne pourrez peut-être PAS supprimer le customerId @Column depuis tout autre code peut déjà y faire référence directement. Dans ce cas, définissez les relations comme suit:
Cela vous permet d'accéder aux relations. Cependant, pour ajouter / mettre à jour les relations, vous devrez manipuler les clés étrangères directement via leurs valeurs @Column définies. Ce n'est pas une situation idéale, mais si vous êtes confronté à ce genre de situation, au moins vous pouvez définir les relations afin que vous puissiez utiliser JPQL avec succès.
la source
ManyToOne
champ de mappage, j'ai besoin d'un champ directement mappé à la colonne de jointure.utilisez ceci, c'est du travail pour moi:
la source
Si vous avez déjà mappé une colonne et avez accidentellement défini les mêmes valeurs pour name et referencedColumnName dans @JoinColumn hibernate donne la même erreur stupide
Erreur:
Causé par: org.hibernate.MappingException: colonne répétée dans le mappage pour l'entité: colonne com.testtest.SomeCustomEntity: COLUMN_NAME (doit être mappée avec insert = "false" update = "false")
la source
J'espère que cela aidera!
la source
Veillez à ne fournir qu'un seul setter et getter pour chaque attribut. La meilleure façon d'aborder est d'écrire la définition de tous les attributs, puis d'utiliser l'utilitaire de définition et de lecture eclipse generate plutôt que de le faire manuellement. L'option vient sur clic droit-> source -> Générer Getter et Setter.
la source
Cela signifie que vous mappez une colonne deux fois dans votre classe d'entité. Expliquer avec un exemple ...
Solution
Le mappage étant une partie importante, vous ne souhaitez pas le supprimer. Au lieu de cela, vous supprimerez
Cela fonctionne à 100%. J'ai testé cela avec Postgres et la base de données Oracle.
la source
Nous avons résolu la dépendance circulaire (Entités parent-enfant) en mappant l'entité enfant au lieu de l'entité parente dans Grails 4 (GORM).
Exemple:
la source