A pesar de todas las publicaciones de los demás, no puedo encontrar una solución para este error con GlassFish, en 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")
Aquí el código:
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
fuente
fuente
customerId
? (por ejemplo, de JSON).Customer customer = entityManager.getReference(customerId, Customer.class); sale.setCustomer(customer);
@EmbeddedId
clave compuesta entrecustomerId
y otro campo de laCustomer
clase? En este caso, necesito ambas columnas repetidas en el mapeo, ¿verdad?@MapsId("customerId")
, consulte stackoverflow.com/questions/16775055/hibernate-embeddedid-joinSi está atascado con una base de datos heredada en la que alguien ya colocó anotaciones JPA pero NO definió las relaciones y ahora está tratando de definirlas para usarlas en su código, entonces es posible que NO pueda eliminar el customerId @Column desde otro código ya puede hacer referencia directamente a él. En ese caso, defina las relaciones de la siguiente manera:
Esto le permite acceder a las relaciones. Sin embargo, para agregar / actualizar las relaciones, tendrá que manipular las claves externas directamente a través de sus valores de @Column definidos. No es una situación ideal, pero si se le presenta este tipo de situación, al menos puede definir las relaciones para poder utilizar JPQL con éxito.
fuente
ManyToOne
campo de mapeo, necesito un campo mapeado directamente a la columna de unión.usa esto, es trabajo para mí:
fuente
Si ya ha mapeado una columna y ha establecido accidentalmente los mismos valores para name y referencedColumnName en columna @JoinColumn, hibernación da el mismo error estúpido
Error:
Causado por: org.hibernate.MappingException: columna repetida en el mapeo de la entidad: com.testtest.SomeCustomEntity columna: COLUMN_NAME (debe mapearse con insert = "false" update = "false")
fuente
¡Espero que esto ayude!
fuente
Tenga cuidado de proporcionar solo 1 setter y getter para cualquier atributo. La mejor manera de acercarse es escribir la definición de todos los atributos y luego usar la utilidad Eclipse generate setter y getter en lugar de hacerlo manualmente. La opción aparece al hacer clic derecho-> fuente -> Generar Getter y Setter.
fuente
Esto significa que está mapeando una columna dos veces en su clase de entidad. Explicando con un ejemplo ...
Solución
Dado que el mapeo es una parte importante, no desea eliminarlo. En cambio, eliminará
Esto funciona al 100%. He probado esto con Postgres y la base de datos Oracle.
fuente
Hemos resuelto la dependencia circular (entidades padre-hijo) mapeando la entidad secundaria en lugar de la entidad madre en Grails 4 (GORM).
Ejemplo:
fuente