Eu acabei o curso agora e estou tentando fazer alguns testes, mas acabou que estou tendo dificuldades logo no inicio kkk. Eu quero a partir desse formulário
<html>
<head>
<meta charset=UTF-8>
<title>Bit Bank</title>
</head>
<body>
<h1>Bit Bank</h1>
<form action="/bitbank/novocliente" method="post">
<div>
<label>Nome</label>
<input type="text" name="titular.nome" />
</div>
<div>
<label>CPF</label>
<input type="text" name="titular.cpf" />
</div>
<div>
<label>RG</label>
<input type="text" name="titular.rg" />
</div>
<div>
<label>Endereço</label>
<textarea rows="10" cols="20" name="endereco"></textarea>
</div>
<button type="submit">Cadastrar</button>
</form>
</body>
</html>
popular duas tabelas, Cliente contendo o id dela e do titular, titular com os dados desse cliente(nome,...) eo id do cliente.
@Entity
@Table(name = "Cliente")
public class Cliente {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
//os metodos que tentei para dar certo
@JoinColumn(unique = true, name="titular_id", referencedColumnName="id")
@OneToOne(cascade=CascadeType.ALL)
// @OneToOne(optional=false,cascade=CascadeType.ALL)
// @JoinColumn(name="titular_ID", unique=true, nullable=false, updatable=false)
private Titular titular;
//pretendo implementar essa partes depois de resolver o erro
// @Embedded
// private List<Conta> conta;
// public List<Conta> getConta() {
// return conta;
// }
// public void setConta(List<Conta> conta) {
// this.conta = conta;
// }
public Cliente() {
this.titular = new Titular();
}
public Titular getTitular() {
return titular;
}
public void setTitular(Titular titular) {
this.titular = titular;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
@Entity
public class Titular{
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@OneToOne //(mappedBy = "titular")
@JoinColumn(name="cliente_id", referencedColumnName="id")
private Cliente cliente;
private String nome;
private String cpf;
private String rg;
//pretendo implementar essa partes depois de resolver o erro
// @Embedded
// private Endereco endereco;
//
// public Endereco getEndereco() {
// return endereco;
// }
// public void setEndereco(Endereco endereco) {
// this.endereco = endereco;
// }
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getCpf() {
return cpf;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public String getRg() {
return rg;
}
public void setRg(String rg) {
this.rg = rg;
}
}
@Repository
@Transactional
public class ClienteDAO {
@PersistenceContext
private EntityManager manager;
public void gravar(Cliente cliente){
manager.persist(cliente);
}
}
@Controller
@RequestMapping("/novocliente")
public class ClienteController {
@Autowired
private ClienteDAO clienteDao;
@RequestMapping(method = RequestMethod.GET)
public ModelAndView form() {
ModelAndView modelAndView = new ModelAndView("cliente/form");
return modelAndView;
}
@RequestMapping(method = RequestMethod.POST)
public ModelAndView gravar(Cliente cliente) {
ModelAndView modelAndView = new ModelAndView("home");
System.out.println(cliente.getId());
clienteDao.gravar(cliente);
System.out.println(cliente.getTitular().getNome());
System.out.println(cliente.getId());
return modelAndView;
}
}
Esse é o resultado que eu tenho
cliente
+----+------------+
| id | titular_id |
+----+------------+
| 1 | 1 |
| 2 | 2 |
+----+------------+
titular
+----+-------+---------------------+-------+------------+
| id | cpf | nome | rg | cliente_id |
+----+-------+---------------------+-------+------------+
| 1 | 12345 | BRYAN MOTTA CORREIA | 12345 | NULL |
| 2 | 12345 | BRYAN MOTTA CORREIA | 12345 | NULL |
+----+-------+---------------------+-------+------------+
cliente esta do jeito que quero, mas titular sempre fica com cliente_id null. Como posso fazer para cliente_id nao ser null e ser populado de inicio? Minha lógica que esta errada ou é meu código?