Pessoal Boa tarde, to com dificuldades na utilização do jpa com banco de dados mysql
tenho uma entidade Usuário onde ela pode ter um ou mais telefones então criei a classe Telefone e na minha classe usuário referenciei com o relacionamnto OneToMany, quando faço a persistencia da classe o jpa consegue persistir os dados nas duas tabelas porem ele deixa a foreign key que seria o usuario_id na tabela de telefones nullo.
vou deixar os códigos aqui.
@Entity
@Table(name = "usuario")
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Size(min = 4, max = 15)
@Column(nullable = false)
private String nome;
@Column(nullable = false)
private String email;
@Column(nullable = false)
private String senha;
@Column(nullable = true)
@OneToMany(mappedBy ="usuario", cascade = CascadeType.ALL)
private List<Telefone> telefones;
public Usuario() {
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public List<Telefone> getTelefones() {
return telefones;
}
public void setTelefones(List<Telefone> telefones) {
this.telefones = telefones;
}
}
e essa é a classe Telefone
@Entity
@Table(name="telefone")
public class Telefone {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Size(max = 3)
@Column(nullable = true)
private String ddd;
@Size(max = 9)
@Column(nullable = true)
private String numero;
@Column(nullable = true)
private String tipo;
@ManyToOne
@JoinColumn(nullable = false)
private Usuario usuario;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDdd() {
return ddd;
}
public void setDdd(String ddd) {
this.ddd = ddd;
}
public String getNumero() {
return numero;
}
public void setNumero(String numero) {
this.numero = numero;
}
public String getTipo() {
return tipo;
}
public void setTipo(String tipo) {
this.tipo = tipo;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
esse é meu MB
@ManagedBean(name = “usuarioController”)
@ViewScoped
public class UsuarioController {
private Usuario usuario;
private UsuarioDao usuarioDao;
private List<Usuario> usuarios;
private Telefone telefone;
private List<Telefone> telefones;
@PostConstruct
public void init() {
usuarioDao = new UsuarioDao();
usuario = new Usuario();
telefone = new Telefone();
telefones = new ArrayList<Telefone>();
try {
usuarios = usuarioDao.listarUsuarios();
} catch (Exception e) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
context.getExternalContext().getFlash().setKeepMessages(true);
}
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public List<Usuario> getUsuarios() {
return usuarios;
}
public void setUsuarios(List<Usuario> usuarios) {
this.usuarios = usuarios;
}
public Telefone getTelefone() {
return telefone;
}
public void setTelefone(Telefone telefone) {
this.telefone = telefone;
}
public List<Telefone> getTelefones() {
return telefones;
}
public void setTelefones(List<Telefone> telefones) {
this.telefones = telefones;
}
public String inserir() {
try {
telefones.add(telefone);
usuario.setTelefones(telefones);
usuarioDao.inserir(usuario);
usuarios = usuarioDao.listarUsuarios();
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Usuario cadastrado com Sucesso!"));
context.getExternalContext().getFlash().setKeepMessages(true);
} catch (Exception e) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
context.getExternalContext().getFlash().setKeepMessages(true);
}
return "index";
}
public String atualizar() {
try {
usuarioDao.atualizar(usuario);
usuarios = usuarioDao.listarUsuarios();
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Lembrete editado com sucesso!"));
context.getExternalContext().getFlash().setKeepMessages(true);
} catch (Exception e) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
context.getExternalContext().getFlash().setKeepMessages(true);
}
return "home";
}
public void selecionar() {
try {
usuario = usuarioDao.selecionar(usuario.getId());
if (usuario == null || usuario.getId() == 0) {
usuario = new Usuario();
throw new Exception("Usuário não encontrado.");
}
} catch (Exception e) {
FacesMessage message = new FacesMessage(e.getMessage());
message.setSeverity(FacesMessage.SEVERITY_ERROR);
FacesContext.getCurrentInstance().addMessage(null, message);
}
}
public String remover() {
try {
usuarioDao.excluir(usuario.getId());
usuarios = usuarioDao.listarUsuarios();
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Lembrete removido com sucesso!"));
context.getExternalContext().getFlash().setKeepMessages(true);
} catch (Exception e) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), e.getMessage()));
context.getExternalContext().getFlash().setKeepMessages(true);
}
return "home";
}
}
e esse é meu XHTML
<h:head>
Adicionar Usuário
</h:head>
<h:body>
<h:messages />
<h:form>
<p:panel header=“Cadastro de usuário”>
<h:panelGrid columns="3">
<p:outputLabel value="Nome:" />
<p:inputText id="nome" value="#{usuarioController.usuario.nome}" required="true">
<f:validateLength minimum="3" maximum="255" />
</p:inputText>
<h:message for="nome" />
<p:outputLabel value="Email:" />
<p:inputText id="email" value="#{usuarioController.usuario.email}" required="true">
<f:validateLength minimum="3" maximum="255" />
</p:inputText>
<h:message for="email" />
<p:outputLabel value="Senha:" />
<p:password id="senha" value="#{usuarioController.usuario.senha}" required="true">
</p:password>
<h:message for="senha" />
<p:outputLabel value="Telefone:" />
<h:panelGrid columns="6">
<p:outputLabel value="ddd"></p:outputLabel>
<p:inputText id="ddd" value="#{usuarioController.telefone.ddd}" required="true"> </p:inputText>
<p:outputLabel value="numero"></p:outputLabel>
<p:inputText id="telefone" value="#{usuarioController.telefone.numero}" required="true"> </p:inputText>
<p:outputLabel for="tipo" value="Tipo:" />
<p:selectOneRadio id="tipo" value="#{usuarioController.telefone.tipo}" unselectable="true">
<f:selectItem itemLabel="Fixo" itemValue="Fixo" />
<f:selectItem itemLabel="movel" itemValue="Movel" />
</p:selectOneRadio>
<h:message for="telefone" />
</h:panelGrid>
</h:panelGrid>
<p:commandButton value="Enviar" action="#{usuarioController.inserir}" />
</p:panel>
</h:form>
</h:body>