Trotz aller anderen Beiträge kann ich mit GlassFish unter MacOSX, NetBeans 7.2 keine Lösung für diesen Fehler finden.
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")
Hier der 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
quelle
quelle
customerId
? (zB von JSON).Customer customer = entityManager.getReference(customerId, Customer.class); sale.setCustomer(customer);
@EmbeddedId
zusammengesetzten Schlüssel zwischencustomerId
und einem anderen Feld derCustomer
Klasse haben? In diesem Fall brauche ich beide wiederholten Spalten in der Zuordnung, habe ich Recht?@MapsId("customerId")
, siehe stackoverflow.com/questions/16775055/hibernate-embeddedid-joinWenn Sie mit einer Legacy-Datenbank nicht weiterkommen, in der bereits jemand JPA-Anmerkungen platziert hat, die Beziehungen jedoch NICHT definiert hat und Sie nun versuchen, sie für die Verwendung in Ihrem Code zu definieren, können Sie die customerId @Column möglicherweise NICHT seit anderem Code löschen kann bereits direkt darauf verweisen. Definieren Sie in diesem Fall die Beziehungen wie folgt:
Auf diese Weise können Sie auf die Beziehungen zugreifen. Um die Beziehungen hinzuzufügen / zu aktualisieren, müssen Sie die Fremdschlüssel jedoch direkt über ihre definierten @ Column-Werte bearbeiten. Es ist keine ideale Situation, aber wenn Sie diese Art von Situation erhalten, können Sie zumindest die Beziehungen definieren, damit Sie JPQL erfolgreich verwenden können.
quelle
ManyToOne
Zuordnungsfeld benötige ich ein Feld, das direkt der Join-Spalte zugeordnet ist.benutze dies, ist Arbeit für mich:
quelle
Wenn Sie bereits eine Spalte zugeordnet haben und versehentlich dieselben Werte für name und referencedColumnName in @JoinColumn Hibernate festgelegt haben, wird derselbe dumme Fehler ausgegeben
Error:
Auslöser: org.hibernate.MappingException: Wiederholte Spalte in der Zuordnung für Entität: com.testtest.SomeCustomEntity Spalte: COLUMN_NAME (sollte mit insert = "false" update = "false" zugeordnet werden)
quelle
Hoffe das wird helfen!
quelle
Achten Sie darauf, für jedes Attribut nur 1 Setter und Getter bereitzustellen. Der beste Weg, dies zu erreichen, besteht darin, die Definition aller Attribute aufzuschreiben und dann das Dienstprogramm eclipse generate setter und getter zu verwenden, anstatt es manuell auszuführen. Die Option ist Rechtsklick-> Quelle -> Getter und Setter generieren.
quelle
Dies bedeutet, dass Sie eine Spalte in Ihrer Entitätsklasse zweimal zuordnen. Mit einem Beispiel erklären ...
Lösung
Da das Mapping ein wichtiger Teil ist, möchten Sie das nicht entfernen. Stattdessen werden Sie entfernen
Dies funktioniert zu 100%. Ich habe dies mit Postgres und Oracle Datenbank getestet.
quelle
Wir haben die zirkuläre Abhängigkeit (Eltern-Kind-Entitäten) gelöst, indem wir die untergeordnete Entität anstelle der übergeordneten Entität in Grails 4 (GORM) zugeordnet haben.
Beispiel:
quelle