Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Inserir uma tabela oneTOone pelo spring

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?

1 resposta
solução!

Oi Bryan, tudo bem?

Para fazer isso, ao cadastrar o titular, você precisa vincular a entidade cliente atrelada aquele titular.

Ou quando você cria o objeto cliente para gravar na base, você precisa atrelar um objeto titular vinculado a um cliente, entende?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software