Fórum Dúvida com relacionamento @OneToMany #506223
04/01/2015
0
public class Cliente implements Serializable {
private static final long serialVersionUID = 7797550805039262611L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@OneToMany(mappedBy = "cliente", cascade = { CascadeType.ALL,
CascadeType.PERSIST, CascadeType.MERGE })
private List<Endereco> endereco;
}
@Table(name = "endereco")
public class Endereco implements Serializable {
private static final long serialVersionUID = -312317668584983632L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@ManyToOne
@JoinColumn(name = "id_cliente")
@NotNull
private Cliente cliente;
}
//Bean
@ManagedBean(name = "clienteBean")
@ViewScoped
public class ClienteBean implements Serializable {
private static final long serialVersionUID = -8802432823573476989L;
@EJB
private ClienteEJB clienteEJB;
private Cliente cliente;
@Inject
private Endereco endereco;
public String cadastraCliente() {
endereco.setCliente(cliente);
if (cliente.getEndereco() == null) {
cliente.setEndereco(new ArrayList<Endereco>());
}
cliente.getEndereco().add(endereco);
this.clienteEJB.adiciona(cliente);
FacesMessage fm = new FacesMessage("Sucesso ao cadastrar a cliente "
+ cliente.getNome());
fm.setSeverity(FacesMessage.SEVERITY_INFO);
FacesContext.getCurrentInstance().addMessage("form", fm);
cliente = new Cliente();
return null;
}
}
//Cliente
<p:inputText value="#{clienteBean.cliente.nome}" id="nome" size="50" required="true" requiredMessage="Informe o nome do cliente"></p:inputText>
//Endereço
<p:inputText id="complemento" value="#{clienteBean.endereco.complemento}" size="50" required="true" requiredMessage="Informe o complemento" />
Adriano Aguiar
Curtir tópico
+ 0Posts
05/01/2015
Ronaldo Lanhellas
Gostei + 0
05/01/2015
Adriano Aguiar
<p:inputText id="complemento" value="#{clienteBean.endereco.complemento}" size="50" required="true" requiredMessage="Informe o complemento" />
Gostei + 0
07/01/2015
Adriano Aguiar
Gostei + 0
07/01/2015
Ronaldo Lanhellas
Mas se você estiver carregando ele em outro ponto e apenas não mostrou o método, checa se no seu SQL ou Hql você está fazendo fetch da entidade endereço dentro do objeto cliente.
Gostei + 0
07/01/2015
Adriano Aguiar
@ManagedBean(name = "clienteBean")
@ViewScoped
public class ClienteBean implements Serializable {
private static final long serialVersionUID = -8802432823573476989L;
@EJB
private ClienteEJB clienteEJB;
private Cliente cliente;
@Inject
private Endereco endereco;
}
@Dependent
@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
private static final long serialVersionUID = 7797550805039262611L;
@OneToMany(mappedBy = "cliente", cascade = { CascadeType.ALL,
CascadeType.PERSIST, CascadeType.MERGE })
private List<Endereco> endereco;
}
@Dependent
@Entity
@Table(name = "endereco")
public class Endereco implements Serializable {
private static final long serialVersionUID = -312317668584983632L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@ManyToOne(cascade = CascadeType.ALL, fetch=FetchType.EAGER)
@JoinColumn(name = "id_cliente")
private Cliente cliente;
}
JSF
<h:outputLabel value="Rua:" />
<p:inputText id="rua" value="#{clienteBean.cliente.endereco.rua}" size="50" required="true" requiredMessage="Informe o nome da rua!" />
Gostei + 0
08/01/2015
Ronaldo Lanhellas
Deveria ter algum método como:
public void loadCliente(){
cliente = getClienteFromId(10);
}
Gostei + 0
08/01/2015
Adriano Aguiar
public void selecionarCliente(Cliente cliente) {
this.cliente = cliente;
}
Gostei + 0
08/01/2015
Ronaldo Lanhellas
public void selecionarCliente(Cliente cliente) {
this.cliente = cliente;
}
Então neste momento o cliente não deve ter o endereco carregado, deve estar como LAZY. Na sua HQL faça um fetch no campo endereco do cliente.
Gostei + 0
08/01/2015
Ronaldo Lanhellas
public void selecionarCliente(Cliente cliente) {
this.cliente = cliente;
}
Então neste momento o cliente não deve ter o endereco carregado, deve estar como LAZY. Na sua HQL faça um fetch no campo endereco do cliente.
Gostei + 0
08/01/2015
Adriano Aguiar
<p:inputText id="bairro" value="#{clienteBean.cliente.endereco.bairro}" required="true" requiredMessage="Informe O bairro da Empresa" />
//erro
/ UI Layout Initialization Error
The center-pane element does not exist.
The center-pane is a required element.
Gostei + 0
09/01/2015
Ronaldo Lanhellas
<p:inputText id="bairro" value="#{clienteBean.cliente.endereco.bairro}" required="true" requiredMessage="Informe O bairro da Empresa" />
//erro
/ UI Layout Initialization Error
The center-pane element does not exist.
The center-pane is a required element.
O erro descrito não tem nada haver com o "endereco" e sim com o layout da sua página. Tente encapsular sua página desta forma:
<p:layoutUnit position="center"> Seu conteúdo aqui </p:layoutUnit>
Gostei + 0
09/01/2015
Ronaldo Lanhellas
<p:inputText id="bairro" value="#{clienteBean.cliente.endereco.bairro}" required="true" requiredMessage="Informe O bairro da Empresa" />
//erro
/ UI Layout Initialization Error
The center-pane element does not exist.
The center-pane is a required element.
O erro descrito não tem nada haver com o "endereco" e sim com o layout da sua página. Tente encapsular sua página desta forma:
<p:layoutUnit position="center"> Seu conteúdo aqui </p:layoutUnit>
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)