Apesar de todas as outras postagens, não consigo encontrar uma solução para este erro com GlassFish, no 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")
Aqui está o 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
fonte
fonte
customerId
? (por exemplo, de JSON).Customer customer = entityManager.getReference(customerId, Customer.class); sale.setCustomer(customer);
@EmbeddedId
chave composta entrecustomerId
e outro campo doCustomer
classe? Nesse caso, preciso de ambas as colunas repetidas no mapeamento, certo?@MapsId("customerId")
, consulte stackoverflow.com/questions/16775055/hibernate-embeddedid-joinSe você está preso a um banco de dados legado onde alguém já colocou anotações JPA, mas NÃO definiu os relacionamentos e agora está tentando defini-los para uso em seu código, então você NÃO poderá excluir o customerId @Column porque outro código já pode referenciá-lo diretamente. Nesse caso, defina as relações da seguinte forma:
Isso permite que você acesse os relacionamentos. No entanto, para adicionar / atualizar os relacionamentos, você terá que manipular as chaves estrangeiras diretamente por meio de seus valores @Column definidos. Não é uma situação ideal, mas se você tiver esse tipo de situação, pelo menos poderá definir os relacionamentos para que possa usar JPQL com sucesso.
fonte
ManyToOne
campo de mapeamento, preciso de um campo mapeado diretamente para a coluna de junção.use isso, é trabalho para mim:
fonte
Se você já mapeou uma coluna e acidentalmente definiu os mesmos valores para name e referencedColumnName em @JoinColumn hibernate dá o mesmo erro estúpido
Erro:
Causado por: org.hibernate.MappingException: Coluna repetida no mapeamento para a entidade: com.testtest.SomeCustomEntity coluna: COLUMN_NAME (deve ser mapeado com insert = "false" update = "false")
fonte
Espero que isso ajude!
fonte
Tenha o cuidado de fornecer apenas 1 setter e getter para qualquer atributo. A melhor maneira de abordar é escrever a definição de todos os atributos e, em seguida, usar o eclipse generate setter e o utilitário getter em vez de fazer isso manualmente. A opção vem com o botão direito -> fonte -> Gerar Getter e Setter.
fonte
Isso significa que você está mapeando uma coluna duas vezes em sua classe de entidade. Explicando com um exemplo ...
Solução
Como o mapeamento é uma parte importante, você não quer removê-lo. Em vez disso, você removerá
Isso funciona 100%. Eu testei isso com Postgres e banco de dados Oracle.
fonte
Resolvemos a dependência circular (Entidades pai-filho) mapeando a entidade filha em vez da entidade pai em Grails 4 (GORM).
Exemplo:
fonte