Несмотря на все остальные сообщения, я не могу найти решение этой ошибки в GlassFish на 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")
Вот код:
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
}
customerId
? (например, из JSON).Customer customer = entityManager.getReference(customerId, Customer.class); sale.setCustomer(customer);
@EmbeddedId
составной ключ междуcustomerId
и другим полемCustomer
класса? В этом случае мне нужны оба повторяющихся столбца в сопоставлении, я прав?@MapsId("customerId")
, см. stackoverflow.com/questions/16775055/hibernate-embeddedid-joinЕсли вы застряли в устаревшей базе данных, где кто-то уже разместил аннотации JPA, но НЕ определил отношения, и теперь вы пытаетесь определить их для использования в своем коде, то вы НЕ сможете удалить customerId @Column, поскольку другой код может прямо ссылаться на него уже. В этом случае определите отношения следующим образом:
Это позволяет вам получить доступ к отношениям. Однако для добавления / обновления отношений вам придется напрямую управлять внешними ключами через их определенные значения @Column. Это не идеальная ситуация, но если вам попадается такая ситуация, по крайней мере, вы можете определить отношения, чтобы успешно использовать JPQL.
источник
ManyToOne
поля сопоставления мне нужно поле, напрямую сопоставленное со столбцом соединения.используйте это, это работа для меня:
источник
Если вы уже сопоставили столбец и случайно установили одинаковые значения для name и referencedColumnName в @JoinColumn, спящий режим дает ту же глупую ошибку
Ошибка:
Вызвано: org.hibernate.MappingException: повторяющийся столбец в сопоставлении для объекта: com.testtest.SomeCustomEntity столбец: COLUMN_NAME (должен отображаться с помощью insert = "false" update = "false")
источник
Надеюсь, это поможет!
источник
Позаботьтесь о том, чтобы для любого атрибута был предоставлен только один метод установки и получения. Лучший способ приблизиться - записать определение всех атрибутов, а затем использовать утилиту eclipse generate setter и getter, а не делать это вручную. Опция появляется при щелчке правой кнопкой мыши -> источник -> Создать получатель и сеттер.
источник
Это означает, что вы дважды сопоставляете столбец в своем классе сущности. Объясняя на примере ...
Решение
Поскольку отображение является важной частью, вы не хотите удалять это. Вместо этого вы удалите
Это работает на 100%. Я тестировал это с помощью Postgres и базы данных Oracle.
источник
Мы разрешили циклическую зависимость (родительско-дочерние сущности) путем сопоставления дочерней сущности вместо родительской в Grails 4 (GORM).
Пример:
источник