Meu problema: Tenho um cadastro de cliente e assim que o cliente se cadastrar seja criada uma conta para este cliente. Não sei como faze-lo alguma sugestão seria bem vinda. Muito obrigado
@Model
public class AdminClientesBean {
private Cliente cliente = new Cliente();
@Inject
private ClienteDAO clienteDAO;
@Inject
private MessagesHelper messagesHelper;
private List<Cliente> clientes;
@Transactional
public String save(){
clienteDAO.save(cliente);
messagesHelper.addFlash(
new FacesMessage("Cliente gravado com sucesso"));
return "/site/conta-cliente?faces-redirect=true\"";
}
cliente.java
@Entity
public class Cliente {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nome;
private String sobrenome;
@Email
@NotBlank
@Column(unique=true)
private String email;
private String senha;
@OneToOne
private Conta conta;
public Cliente() {
}
clienteDAO
public class ClienteDAO implements Serializable{
private static final long serialVersionUID = 1L;
@PersistenceContext
private EntityManager manager;
public void save(Cliente cliente) {
manager.persist(cliente);
}
public ClienteDAO(){
}
public ClienteDAO(EntityManager manager) {
super();
this.manager = manager;
}
conta.java
@Entity
public class Conta implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String titular;
private String numero;
@OneToMany(mappedBy = "conta")
private List<Movimentacao> movimentacoes;
Oi Darlan, eu esqueci de mencionar, criei uma classe service (ClienteService.java) para tratar essa abertura da conta assim que o cadastro do cliente fosse concluído. Mas não está funcionando não sei porque você poderia me ajudar? segue o arquivo:
public class ClienteService {
ClienteDAO clienteDAO;
public void cadastrar(Cliente cliente) {
Conta conta = new Conta();
cliente.setConta(conta);
clienteDAO.save(cliente);
}
Se você que está desenvolvendo e poderia debugar não sabe, quem dirá eu que estou há anos-luz de distância e sem nem saber se apresenta erro, exceção, se para, se pisca a tela, se dá tela azul da morte, kernel panic ou sei lá o que.
Esse “Não funciona” é genérico demais, precisa ser mais claro.
Desculpe Darlan, realmente não consegui me expressar.
Quero dizer que quando executo o cadastro do cliente, nenhum erro aparece, o cliente é cadastrado, mas, na tabela cliente, o campo conta_id mostra null.
Na tabela “conta” nenhum do campos “id” “numero”(numero da conta) e “titular” (cliente) se preenchem automaticamente, ficam vazios, eu achei que criando um clienteService ele se preencheria automaticamente.
Obrigado Mike, você poderia me explicar no meu código onde eu deixei fixo a instanciação da classe Conta? Seria no ClienteService?
Eu utilizaria o CascadeType.PERSIST no relacionamento cliente/conta nessa instanciação da classe Conta no clienteService?
Muito obrigado Guilherme pelo seu retorno, vou tentar implementar o CascadeType.PERSIST sugerido pelo Mike na classe ClienteService e postarei o resultado.
oi Guilherme fiz desta forma, mas quando você diz preencher o objeto Conta seria para definir um numero sequencial da conta e ligar ao cliente? Como posso fazer para conseguir isso? Me passe um exemplo por favor.
public class ClienteService {
ClienteDAO clienteDAO;
@OneToMany(cascade=CascadeType.PERSIST, mappedBy="cliente")
public void cadastrar(Cliente cliente) {
Conta conta = new Conta();
cliente.setConta(conta);
clienteDAO.save(cliente);
}
Oi Guilherme obrigado pelo retorno, você tem razão, isso mesmo, o melhor seria verificar se já existe uma conta cadastrada no BD, caso não, abrir uma, caso sim, avisar que este cliente já possui um cadastro e conta no sistema. O problema para mim, é que eu não sei e não entendo como fazer o cadastro do cliente, verificar se uma conta deste cliente já existe no BD e também ao mesmo tempo, cadastrar uma conta para esse cliente (tudo de uma vez, na hora do cadastramento do cliente). Não consigo enxergar como fazer isso. Já quebrei a cabeça aqui e não consigo um resultado somente null.