Persistir objeto com chave estrangeira

7 respostas Resolvido
Guma_Cojogra2

Venho novamente solicitar a ajuda de vocês, dei uma pesquisada aqui no fórum e achei alguns tópicos parecidos, mas ainda estou tendo dificuldade em implementar.

Como faço para persistir um objeto com chave estrangeira
Eu tenho o tópico mas na tabela questão o que vai é a id do tópico que é minha chave estrangeira.

public class QuestaoDAO {
// a conexão com o banco de dados

    private Connection connection;

    public QuestaoDAO() {
    this.connection = new ConnectionFactory().getConnection();
    }

    public void adiciona(Questao questao) {
    String sql = "insert into tblQuestoes "
            + "(topico, texto,correta, comentario)"
            + " values (?, ?, ?, ?)";
    try {
    // prepared statement para inserção
        PreparedStatement stmt = connection.prepareStatement(sql);
    // seta os valores

        stmt.setString(1, questao.getTopico()); //MEU PROBLEMA É AQUI EU JA TENHO UMA TABELA TÓPICO COM OS TÓPICOS CADASTRADOS
    // O QUE EU TENHO QUE INSERIR AQUI NÃO É O TÓPICO E SIM A ID DA TABELA TÓPICOS QUE É MINHA CHAVE ESTRANGEIRA
    // E SE NÃO TIVER CADASTRADO O TÓPICO, QUERO INSERIR ELE NA TABELA TÓPICO E SALVAR NA TABELA QUESTÃO A CHAVE DO MESMO.
        stmt.setString(2, questao.getTexto());
        stmt.setString(3, questao.getResposta());
        stmt.setString(4, questao.getComentario());

        stmt.execute();
        stmt.close();
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}

}

7 Respostas

jacoboliveira

Inseri primeiro o tópico dai VC pega o tópico id do tópico e grava na tabela questoes

Guma_Cojogra2

Cara o problema é que sou novo em java e não sei como codificar isto.

thiago_silva_develop

Na tblQuestoes o campo “topico” é o ID do topico?

Se for, acredito que vc possa passar por parametro o id:

stmt.setString(1, questao.getTopico().getId());
Guma_Cojogra2

sim, mas no objeto questão o tópico é uma string e não um objeto,o correto seria criar uma classe tópico? Achai desnecessário criar uma classe só com os atributos id e tópico, que seria o nome do tópico e ses métodos gets e sets mesmo ele posuindo uma tabela no banco.

thiago_silva_develop
Solucao aceita

Do meu ponto de vista seria correto vc ter uma entidade para representar o Topico sim.

Como você tem uma tabela chamada tblQuestoes, da a impressão de que você terá várias questões (N) para 1 tópico (N x 1).

Se for apenas 1 questão não há a necessidade da tabela Topico, o campo pode ser de fato somente uma String, daí neste cenário você não precisa se preocupar com Chave Estrangeira.

Guma_Cojogra2

Thiago, vou fazer isso obrigado.

thiago_silva_develop

por nada

Criado 24 de junho de 2016
Ultima resposta 24 de jun. de 2016
Respostas 7
Participantes 3