Silveira.Marcelo:
Olá a todos
Gostaria de saber como faço para criar meu dado para persistir os dados de duas tabelas que se relacionam. Eu tenho uma tabela editora e outra tabela livro com relacionamento um para muitos. Como faço para persistir os dados utilizando JDBC na tabela livro, sendo que preciso salvar uma referência editora também? Segue abaixo o código
Tabela editora
CREATE TABLE editora (
id bigint not null auto_increment,
nome varchar(255) not null,
email varchar(255) not null,
primary key (id)
)
engine = InnoDB;
Tabela livro
CREATE TABLE livro (
id bigint not null auto_increment,
titulo varchar(255) not null,
preco double not null,
editora_id bigint not null,
primary key (id),
constraint fk_editora foreign key fk_editora(editora_id)
references editora(id)
on delete restrict
on update restrict
)
engine = InnoDB;
Bem pessoa, consegui persistir os dados utilizando um relacionamento 1 : N entre as tabelas mencionadas acima. Abaixo segue o código:
Editora.java
package br.com.soaressolutions.model;
public class Editora {
private Long id;
private String nome;
private String email;
public Editora() {
super();
}
public Editora(String nome, String email) {
this.nome = nome;
this.email = email;
}
public Editora(Long id, String nome, String email) {
this(nome, email);
this.id = id;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String toString() {
return "[Editora: " + this.nome + "] "
+ " [e-mail: " + this.email + "] "
+ "[id: " + this.id + "]";
}
}
Livro.java
[
package br.com.soaressolutions.model;
public class Livro {
private Long id;
private String titulo;
private Double preco;
private Editora editora;
public Livro() {
super();
}
public Livro(Long id, String titulo,Double preco, Editora editora) {
this.id = id;
this.titulo = titulo;
this.preco = preco;
this.editora = editora;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
public Editora getEditora() {
return editora;
}
public void setEditora(Editora editora) {
this.editora = editora;
}
public String toString() {
return "[Titulo: " + this.getTitulo() +
" [preco: " + this.getPreco() + "]";
}
}
LivroDaoImpl.java
package br.com.soaressolutions.dao;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import br.com.soaressolutions.connect.ConnectionDataBase;
import br.com.soaressolutions.model.Livro;
public class LivroDaoImpl implements LivroDao {
@Override
public void save(Livro livro) throws SQLException {
String sql = "INSERT INTO livro (titulo, preco, editora_id)";
sql += " VALUES ('" + livro.getTitulo() + "',";
sql += "'" + livro.getPreco() + "'" + ",";
sql += "'" + livro.getEditora().getId() + "')";
Connection conn = null;
Statement stmt = null;
try {
conn = ConnectionDataBase.getConnection();
stmt = conn.createStatement();
stmt.executeUpdate(sql);
System.out.println("Livro salvo com sucesso");
} catch (SQLException e) {
// TODO: handle exception
e.printStackTrace();
} finally {
ConnectionDataBase.close(conn, stmt);
}
}
}
Agora segue a classe de teste TesteInsercaoLivro.java
package br.com.soaressolutions.test;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Scanner;
import br.com.soaressolutions.connect.ConnectionDataBase;
import br.com.soaressolutions.dao.EditoraDaoImpl;
import br.com.soaressolutions.dao.LivroDaoImpl;
import br.com.soaressolutions.model.Editora;
import br.com.soaressolutions.model.Livro;
public class TesteInserirLivro {
/**
* @param args
*/
public static void main(String[] args) {
Livro livro = new Livro();
List<Editora> editoras = null;
Scanner sc = new Scanner(System.in);
Connection conn = null;
@SuppressWarnings("unused")
Statement stmt = null;
System.out.println("Livro: ");
String nomeLivro = sc.nextLine();
System.out.println("Preco: ");
Double preco = sc.nextDouble();
System.out.println("Editora: ");
livro.setTitulo(nomeLivro);
livro.setPreco(preco);
try {
conn = ConnectionDataBase.getConnection();
stmt = conn.createStatement();
editoras = new EditoraDaoImpl().getAll();
//exibe a lista de editoras para escolha
for(Editora ed: editoras) {
System.out.print(ed.getId() + "\t");
System.out.println(ed.getNome());
}
//opção de escolha de editoras
Long opcao = sc.nextLong();
//percorre os objetos persistidos na entidade Editora
for(int i = 0; i < editoras.size(); i++) {
//Se opcao escolhida for igual a
//alguma editora da lista
if(opcao.equals(editoras.get(i).getId())) {
//define um editora no objeto livro
livro.setEditora(editoras.get(i));
//persiste os objetos na tabela livro
new LivroDaoImpl().save(livro);
}
}
} catch(SQLException e) {
e.printStackTrace();
}
}
}
Fica aqui o desafio para uma melhor implementação do código, para quem tiver uma outra solução para apresentar.
Obrigado a todos que visitaram o tópico e responderam
Feliz Natal