Duvidas Sobre Relacionamentos de Classes

5 respostas
abraaoinfo

Tenho duas classes que se relacionam assim 1-N. Armario tem um ou mais Compartimento, Compartimento tem que ter um único ármario.
Minha classe armario tem uma List já a minha classe Compartimento tem um objecto do tipo armario.

Duvidas, já que eu não posso ter armario sem pelo menos um compartimento e compartimento não existe sem armario.

Seria correto eu deixa existi um instancia de ármario sem compartimento ?

Seria ideal ter um método dentro da classe ármario que fabrica Compartimento e que adiciona na lista de compartimento, se sim, como ficaria a classe ArmarioDAO essa seria também responsável por adicionar o os compartimentos também na base de dados?

Para garantir que um ármario não exista sem compartimento posso pega os parâmetros de compartimento no construtor de ármario e criar um compartimento e adiciona-lo na lista de compartimento?

A ArmarioDAO poderia ter a responsabílidade de administrar a persistencia de Compartimento?

classe Armario

package br.com.flextronic.bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class Armario  implements Serializable{
	
	
	private static final long serialVersionUID = 1L;
	private Integer id;
	private String nome;
	private List<Compartimento> compartimentos;
	
	
	private Armario() {
		// TODO Auto-generated constructor stub
    }
	
	
	
	
	public Armario(String nome) {
		super();
		this.nome = nome;
		
	}

	
	public Armario(Integer id,String nome) {
	
		this.nome = nome;
		this.id = id;
	}
	
	//getter e setters  de nome e id ocultados.
	
	public List<Compartimento> getCompartimentos() {
		return compartimentos;
	}
	public void addCompartimento(Compartimento compartimento) {
		if(this.compartimentos == null){
			this.compartimentos = new ArrayList<Compartimento>();
		}
		this.compartimentos.add(compartimento);
	}
	
  
	public int  qtdCompartimentos(){
		return this.compartimentos.size();
	}
	
	
	//equals e hascode ocultado
	
	

}

classe compartimento

package br.com.flextronic.bean;

import java.io.Serializable;
import java.util.List;

public class Compartimento implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Integer id;
	private int posicao;
	private Armario armario;
	private List<Equipamento> equipamentos;
	
	public Compartimento() {
		// TODO Auto-generated constructor stub
	}
	

	public Compartimento( int posicao, Armario armario) {
		super();
		this.posicao = posicao;
		this.armario = armario;
	}

	

	public Compartimento(Integer id, int posicao, Armario armario) {
		super();
		this.id = id;
		this.posicao = posicao;
		this.armario = armario;
	}


	//getters e setters das propriedades armario, id e posição ocultados
	public List<Equipamento> getEquipamentos() {
		return equipamentos;
	}
	public void addEquipamentos(Equipamento equipamento) {
		this.equipamentos.add(equipamento);
	}
	
	public int qtdEquipamentos (){
		return this.qtdEquipamentos();
	}
	
	
	
	
}

ArmarioDAO aonde estou com mais duvidas.

public class ArmarioDAO extends GenericDAO implements IDAO<Armario> {
    
	
	//Seria corretor eu persistir nesse método também os compartimentos?
	@Override
	public int salvar(Armario bean) {
		
		String sql ="INSERT INTO armario(nome_armario )VALUES(?)" ;
		int affect= 0;
		try {
			
			affect = executeComand(sql, bean.getName());
		} catch (SQLException e) {
			 JOptionPane.showMessageDialog(null,"Erro ao Cadastrar o armario!\n"+ e.getMessage(),"ATENÇÃO",JOptionPane.WARNING_MESSAGE); 
			 e.printStackTrace();
		}finally{
			closeConexao();
		}
		
		return affect;
	}

}

Já agradeço a coloboração dos usuarios do forum.

5 Respostas

A

Pessoal do Fórum, corrija me caso estiver errado!

Em minha opinião, na instancia de compartimentos deve existir um armário.

Seria ideal um método para construir a lista de armários, no caso pode ser o próprio construtor.
Olha não me recordo muito bem da sintaxe da conexão de dados sem Hibernate, mas vou fazer uma interface e classes
para você entender minha ideia.

public interface IArmario()
{
        public List<Armario>  buscaTodas(); // Armário entity; 
        public int busca(int id); 
}
// Você implementa no Compartimentos 

public class Compartimento()
{
     private List<Armario> armarios;  
     private int idSelecionado; // Caso faça um SelectOneMenu para cadastrar um armário no compartimento; 
      public Compartimento()
     {
         // Aqui vai os procedimentos para buscar os dados

          for( Armario obj : buscaTodas())
          {
                 Armarios.add(obj); 
          }
       // Fecha o procedimento

     }
     public void salvarComponente()
     {
            //.... Abre o procedimento para o banco...
            //Atribui( "seta" os valores) 
            // Em especial; 
            obj.setArmario(busca(idSelecionado)); // Método busca = banco... 
            // 
     }

     // Pronto... 
}

Obs.: no banco de dados, especificamente no compartilhamento deve ter a FK armário, agora no classe armário faz os procedimentos simples…

Espero ter ajudado,

Att,

André Vieira.

abraaoinfo

Andr?de Souza Vieira

Compartimento só pode ter um único armario.

id da tabela armario vai aparecer varias vezes na tabela compartilhamento.

abraaoinfo

Andr?de Souza Vieira

Compartimento só pode ter um único armario.

id da tabela armario vai aparecer varias vezes na tabela compartilhamento.

abraaoinfo

Alguém maas aí pode emitir opinião?

erico_kl

O seu problema seria somente não deixar existir uma instância de Armario sem pelo menos 1 Compartimento? Assim como não deixar existir um Compartimento sem este estar em um Armario? Não sei se é o que você quer mas você pode tratar isso no construtor (ou no seu builder):

public Armario(Integer id, String nome, List<Compartimento> compartimentos) { if (compartimentos == null || compartimentos.isEmpty()) throw new RuntimeException("Armário sem compartimentos..."); ... }
e fazer o mesmo para o Compartimento.

Lembrando que se é um relacionamento 1xN, um Compartimento vai estar em um Armario e portanto vai conter um objeto da classe Armario dentro dele.

Criado 20 de outubro de 2012
Ultima resposta 21 de out. de 2012
Respostas 5
Participantes 3