Bom dia!
Desejo criar uma table com as seguintes características (codificação, classe, ordem, família, gênero, id) a partir da classe autorelacionada.
@Entity
@Table(name="TB_GRUPO_PRODUTOS")
public class GrupoProdutos implements Serializable {
@Id
@SequenceGenerator (name="generator_gruprod", sequenceName="sequence_gruprod")
@GeneratedValue (generator="generator_gruprod")
@Column (name="TF_ID_GRUPROD")
private int id;
@Column (name="TF_NOME_GRUPROD",unique=true,length=100, updatable=true, nullable = false)
private String nome;
@Column (name="TF_SITUACAO_GRUPROD", length=1, updatable=true, nullable = false)
private String situacao;
@Column (name="TF_LANCAMENTO_GRUPROD", length=1, updatable=true, nullable = false)
private String lancamento;
@Column (name="TF_CODIFICAO_GRUPROD", length=50, updatable=true, nullable = false)
private String codificacao;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_pai", insertable = true, updatable = true, nullable = true)
private GrupoProdutos id_pai;
//demais codigos
Pesquisas simples Pai e filhos eu consigo fazer, porem vi que consegue muito processamento, então pensei em montar uma table com essa informação, porem não sei como adequar a query, a ideia seria ter no final algo como:
codificação, classe, ordem, família, gênero, id
1 - Produtos - - - - 1
1.1 - Produtos - Agrícola - - - 2
1.1.1 - Produtos - Agrícola - Agrotóxicos - - 3
1.1.1.1 - Produtos - Agrícola - Agrotóxicos - Inseticidas - 4
1.2 - Produtos - Mercado - - - 5
1.2.1. - Produtos - Mercado - Alimentos - - 6
1.2.1.1 - Produtos - Mercado - Alimentos - Feijão - 7
ou talvez mesmo uma jtree mas nao consigui adapatar nenhuma utilizando o auto relacionamento.
Ou mais ou menos assim o resultado que eu espero.
Sei que fazendo algumas gambi eu chego no que quero, tudo preenchido, mas sei que isso vai comer processamento, por isso, se alguem me dar uma luz agradeço.
como e o primeiro que estou fazendo, e aprendizagem, ele se chama “Frank” rs.
Utilizei essa gambiarra para chegar no resultado final se alguem me orientar na forma correta eu agradeço.
Como não tinha colocado no banco um identificado se era classe, especie etc,e tinha colocado um codificador, fiz a contagem dos “.” e depois o if, sei que e errado usar o tablemodeldefault mas ainda estou nos primeiros passos.
private void preencher_jtable()
{
jTable1.getColumnModel().getColumn(0).setPreferredWidth(50);
jTable1.getColumnModel().getColumn(1).setPreferredWidth(50);
jTable1.getColumnModel().getColumn(2).setPreferredWidth(50);
jTable1.getColumnModel().getColumn(3).setPreferredWidth(50);
jTable1.getColumnModel().getColumn(4).setPreferredWidth(50);
jTable1.getColumnModel().getColumn(5).setPreferredWidth(50);
jTable1.getColumnModel().getColumn(6).setPreferredWidth(10);
DefaultTableModel modelo = (DefaultTableModel)jTable1.getModel();
modelo.setNumRows(0);
try
{
GrupoProdutos obj_grupo = new GrupoProdutos();
servGrupoProd serv_grupo = new servGrupoProd();
DAOGenerico obj_dao = new DAOGenerico(obj_grupo);
String codex="", classe="", ordem="", familia="", genero="", cadastros="", especie="";
String obj_idpai;
List<GrupoProdutos> list_tabela_jt = obj_dao.listar("GrupoProdutos order by codificacao");
int tamanho_lista_jt = list_tabela_jt.size();
int i = 0;
for(i=0;i<tamanho_lista_jt;i++)
{
obj_grupo = list_tabela_jt.get(i);
codex=""; classe=""; ordem=""; familia=""; genero=""; cadastros=""; especie="";
codex = obj_grupo.getCodificacao().toString();
int num_dot = calcCaracter(codex, ".");
if(num_dot == 0)
{
classe = obj_grupo.getNome();
}
if(num_dot == 1)
{
classe = obj_grupo.getId_pai().getNome();
ordem = obj_grupo.getNome();
}
else if(num_dot == 2)
{
classe = obj_grupo.getId_pai().getNome();
ordem = obj_grupo.getId_pai().getId_pai().getNome();
familia = obj_grupo.getNome();
}
else if(num_dot == 3)
{
classe = obj_grupo.getId_pai().getId_pai().getNome();
ordem = obj_grupo.getId_pai().getId_pai().getId_pai().getNome();
familia = obj_grupo.getId_pai().getNome();
genero = obj_grupo.getNome();
}
else if(num_dot == 4)
{
classe = obj_grupo.getId_pai().getId_pai().getId_pai().getNome();
ordem = obj_grupo.getId_pai().getId_pai().getId_pai().getId_pai().getNome();
familia = obj_grupo.getId_pai().getId_pai().getNome();
genero = obj_grupo.getId_pai().getNome();
especie = obj_grupo.getNome();
}
cadastros = ""+ obj_grupo.getId();
modelo.addRow(new Object[]{
codex,
classe,
ordem,
familia,
genero,
especie,
cadastros
});
}
}
catch (Exception e)
{
}
}
private int procura_item(int id)
{
servGrupoProd serv_grup = new servGrupoProd();
return serv_grup.tamlist("id_pai", id);
}
public int calcCaracter(String MinhaString, String Char)
{
int total = 0;
String x = MinhaString;
String y = Char;
for(int i=0;i<=x.length()-1;i++)
{
if(x.substring(i,i+1).equalsIgnoreCase(y))
{
total = total +1;
}
}
return total;
}