Olá
Estou estudando Java para web com primefaces só que todos os exemplos que encontro esta criando o banco de dados direto (vazio) eu estou querendo um exemplo de como fazer com um banco que já existe.
Quando a tabela é simples consigo fazer funcionar, mas quando tem chave estrangeira não funciona.
Alguém tem um exemplo ou um link que possa me ajudar?
Isso é muito genérico. O que não funciona? Dá erro? Qual erro?
Basicamente, o funcionamento é o mesmo (ou deveria ser) o que deixa mais complicado é a forma como você vai mapear as diversas tabelas, colunas e relacionamentos entre elas.
Acho que o erro esta dando na chave estrangeira
@OneToOne or @ManyToOne on domain.Cargos.idmembro references an unknown entity: domain.Membros
Eu estou usando @ManyToOne assim:
@ManyToOne
@JoinColumn(nullable = false)
private Membros idmembro;
Ler as mensagens de erro e tentar interpretá-las é fundamental para qualquer desenvolvedor.
Veja quereferences an unknown entity domain.Membros indica que o mapeamento aponta para uma classe que não está mapeada com a anotação @Entity ou que a mesma não foi incluída no arquivo de configuração (persistence.xml, provavelmente).
Esta sim
@SuppressWarnings(“serial”)
@Entity
public class Membros extends GenericDomain {
Como eu disse estou estudando.
Esse arquivo persistence.xml é o mesmo do hibernate.cfg.xml
Se sim… não estava referenciado
Como o título do post é java EE, supus que estivesse utilizando o padrão JEE e não o padrão hibernate.
Sim, é o relativo do padrão JPA para o que o hibernate.cfg.xml é para o hibernate.
Particularmente, eu prefiro a abordagem que não usa o xml, mas o hibernate.properties. Acho mais tranquila e mais legal.
Consegui fazer funcionar
coloquei a linha @GeneratedValue(strategy = GenerationType.SEQUENCE) estava como AUTO.
E refiz a chave estrangeira e agora funcionou.
Ps.: Agora isso que você falou que ainda estou com dúvida padrão JEE e o padrão hibernate.
Qual a diferença?
Um pouco de história:
No princípio, só havia JDBC e algumas pessoas viram isso como algo ruim (improdutivo).
Então, começaram a pensar em uma solução e nasceu o conceito ORM - object relational mapping. O hibernate foi um dos primeiros frameworks a se dedicar a isso (não que não houvesse mais nenhum, ele só foi um dos mais famosos).
Como o hibernate e os frameworks ORM começaram a fazer sucesso, a Sun e os partners decidiram criar um conjunto de regras (a famosa JSR - java specification release) e definir como deveria ser o funcionamento de um framework ORM padrão JPA (java persistence API).
O time do hibernate começou a criar meios para atender às novas regras, sem deixar a estrutura anterior de lado.
Basicamente, o que muda é o conceito (e a forma de fazer). De qualquer forma, você ainda precisa mapear as entities, dizer a quais tabelas estão associadas, mapear colunas, definir primary keys e a estratégia empregada a elas, relacionamentos e tudo o que você faz hoje.
Mesmo com a especificação, ainda há brecha para que um provider JPA seja diferente do outro (tente utilizar dois persistent bags no hibernate como lazy false e veja o problema, o que não ocorre no EclipseLink, por exemplo). Além da configuração no persistence.xml, que será diferente.
Em suma, os pontos mais distantes são:
Hibernate: baseia-se em sessão (Session), carregada a partir de uma Configuration.
JPA: baseia-se em gerenciamento de entidades (EntityManager), carregadas a partir de uma unidade persistente (PersistenceUnity).
Lógico que há mais coisas aí, ok?
A semelhança fica por conta da transação (Transaction no Hibernate e EntityTransaction no JPA), sem transações, quase nada pode ser feito.
Falando em termos de mercado, saber hibernate é um bom começo. Saber JPA é ótimo. Mas, dizer que você tem mais chances com um ou com outro é bobagem. De repente nem usará ORM e ficará no bom e velho (mas pouco produtivo) JDBC.