Persitencia com chave composta

16/10/2009

@Entity
@Table(name = "produto")
public class Produto implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "COD_PRODUTO", nullable = false)
    private Integer codProduto;
    @Column(name = "DES_PRODUTO")
    private String desProduto;
    @Column(name = "PRECO_VENDA")
    private Double precoVenda;
    @Column(name = "PRECO_CUSTO")
    private Double precoCusto;
    @Column(name = "QTD_ESTOQUE")
    private String qtdEstoque;
    @JoinColumns({@JoinColumn(name = "COD_SUB_CATEGORIA",
  referencedColumnName = "COD_SUB_CATEGORIA"),
  @JoinColumn(name = "COD_CATEGORIA",
  referencedColumnName = "COD_CATEGORIA")})
    @ManyToOne
    private SubCategoria subCategoria;
   @Entity
@Table(name = "sub_categoria")
public class SubCategoria implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected SubCategoriaPK subCategoriaPK;
    @Column(name = "DESCRICAO")
    private String descricao;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "subCategoria")
    private Collection<Produto> produtoCollection;
    @JoinColumn(name = "COD_CATEGORIA", referencedColumnName = "COD_CATEGORIA", insertable = false, updatable = false)
    @ManyToOne
    private Categoria categoria;
@Entity
@Table(name = "categoria")
@NamedQueries({@NamedQuery(name = "Categoria.findByCodCategoria", query = "SELECT c FROM Categoria c WHERE c.codCategoria = :codCategoria"), @NamedQuery(name = "Categoria.findByDescricao", query = "SELECT c FROM Categoria c WHERE c.descricao = :descricao")})
public class Categoria implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "COD_CATEGORIA", nullable = false)
    private Integer codCategoria;
    @Column(name = "DESCRICAO")
    private String descricao;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "categoria")
    private Collection<SubCategoria> subCategoriaCollection;
Create table CATEGORIA (
 CATEGORIA_NO Int UNSIGNED NOT NULL AUTO_INCREMENT,
 DESCRICAO Varchar(100),
 Primary Key (CATEGORIA_NO)) ENGINE = InnoDB; Create table SUB_CATEGORIA (
 SUB_CATEGORIA_NO Int UNSIGNED NOT NULL,
 CATEGORIA_NO Int UNSIGNED NOT NULL,
 DESCRICAO Varchar(100),
 Primary Key (SUB_CATEGORIA_NO)) ENGINE = InnoDB; Create table PRODUTO (
 PRODUTO_NO Int UNSIGNED NOT NULL AUTO_INCREMENT,
 SUB_CATEGORIA_NO Int UNSIGNED NOT NULL,
 UNIDADE_NO Int UNSIGNED NOT NULL,
 DESCRICAO Varchar(100),
 VALOR_VENDA Double,
 VALOR_CUSTO Double,
 QUANTIDADE Int,
 CATEGORIA_NO Int UNSIGNED NOT NULL,
 Primary Key (PRODUTO_NO)) ENGINE = InnoDB;
Tenho a seguinte situação:  No formulário de produtos preciso selecionar uma categoria em um JComboBox
logo após esta seleção preciso que o JComboBox de subCategorias seja filtrado trazendo
somente as subCategorias relacionadas com a categoria selecionada anteriormente, no entanto
O netBeans gera os beans anotados da forma acima: No entanto desta forma somente é possivel selecionar uma subCategoria  e quado clico no botão salvar do formulário a categoria relacionada é automaticamente persistida
Existe um modo alternativo para mapear os objetos para fazer o que preciso?   Observe que na classe subCategoria existe uma chave primaria composta.   A apicação é desktop swing + jgoodies
Israel Barbosa

Israel Barbosa

Curtidas 0

Respostas

Dyego Carmo

Dyego Carmo

16/10/2009

Bom dia !

Voce precisa selecionar varias subcategorias para o produto ?

Valeu !


GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Não preciso selecionar somente uma subcategoria
GOSTEI 0
Dyego Carmo

Dyego Carmo

16/10/2009

Olá !

Desculpe , eu nao entendi BEM a sua duvida...

Voce não conseguindo fazer com que o Produto seja persistido com sua categoria ?

GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:  
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:  
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:          
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           -
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine a
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine a seguinte
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine a seguinte situação
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine a seguinte situação:
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine a seguinte situação: Categoria
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine a seguinte situação: Categoria -
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine a seguinte situação: Categoria - Masculino,
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine a seguinte situação: Categoria - Masculino, Feminino SubCategoria
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Vou tentar exemplificar:           - Imagine a seguinte situação: Categoria - Masculino, Feminino SubCategoria -
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Foi mal não sei o que acontece Imagine o seguinte: eu tenho Categoria masculino  que contem a subCategoria sapato de amarrar, sapato de elastico Categoria masculino: eu tenho a subCategoria sapato de amarrar, sapato de elastico, sapato mocassin   No formulario de Produtos(no caso sapatos) eu tenho que selecionar a Categoria para que seja realizado um filtro trazendo somente as subCategorias relacionadas com uma determinada categoria Exemplo selecionei a categoria masculino em um comboBox automaticamente o combobox deve ser preenchido com as subCategorias: sapato de amarrar, sapato de elastico, sapato mocassin   Ou se eu selecionar a Categoria feminino o combobox de subCategorias deve ser preenchido com as subCategorias: sapato de amarrar, sapato de elastico Da forma como esta o mapeamento este filtro não ocorre.
GOSTEI 0
Dyego Carmo

Dyego Carmo

16/10/2009

Seu mapeamento esta correto:

A classe PRODUTO detemuma propriedade SUBCATEGORIA , que vai ser preenchida com a subcategoria que voce selecionar em tela , afinal a categoria serviria apenas para filtro...

A classe categoria tem uma propriedade que retorna todas suas subcategorias , entao voce consegue saber quais subcategorias estao cadastradas para aquela categoria...

Em questão a MAPEAMENTO está correto...

Voce esta tendo dificuldade em fazer isto funcionar em JavaServerFaces , eh isso ?
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Eu estou tendo dificuldades em fazer isto funcionar em uma aplicação Swing + JGoodies: Se eu enviar o codigo sera que tem como vc analiar e falar as alterações que devo realizar?
GOSTEI 0
Dyego Carmo

Dyego Carmo

16/10/2009

Irei criar um exemplo e amanhã postoa aqui OK ?

GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Tenho o seguinte problema:
 Tenho uma JTable que deve ser ordenada quando clico em uma coluna e filtrada quando digito em um campo
no entanto deve ocorrer uma sincronia entre a visão(dados exibidos pela jtable)
e a lista que contem os dados ou seja deve haver uma sincronia entre os dois. E justamente
isto que não estou conseguindo fazer. Este é um trecho da documentação que cita algo a respeito
o link para a documentação completa é:http://java.sun.com/javase/6/docs/api/javax/swing/table/TableRowSorter.html
This will do all the wiring such that when the user does the appropriate gesture, such as clicking on the column header, the table will visually sort.
JTable's row-based methods and JTable's selection model refer to the view and not the underlying model. Therefore, it is necessary to convert between the two. For example, to get the selection in terms of myModel you need to convert the indices:    int[] selection = table.getSelectedRows();
   for (int i = 0; i < selection.length; i++) {
     selection[i] = table.convertRowIndexToModel(selection[i]);
   }
 Similarly to select a row in JTable based on a coordinate from the underlying model do the inverse:
   table.setRowSelectionInterval(table.convertRowIndexToView(row),
                                 table.convertRowIndexToView(row));
 The previous example assumes you have not enabled filtering. If you have enabled filtering convertRowIndexToView will return -1 for locations that are not visible in the view.   o código que tenho é o seguinte: fabricanteTable = new JTable(); // Cria uma JTable
        fabricanteTable.setModel(fabricanteManagerModel.getFabricanteTableModel()); // Adiciona um tableModel
        fabricanteTable.setSelectionModel(new SingleListSelectionAdapter(
 fabricanteManagerModel.getFabricanteSelection().getSelectionIndexHolder())); // Permite uma unica seleção         fabricanteTable.setRowSorter(fabricanteManagerModel.getRowSorter());//Adiciona o rowSorter responsavel pela ordenação  
rowSorter = new TableRowSorter<TableModel>(fabricanteTableModel); // cria o rowSorter e o adiciona o AbstracttableModel nele //Codigo responsavel pela filtragem
@SuppressWarnings("unchecked")
 private void observaValorFiltro() {
  String text = (String) textoFiltroHolder.getValue();
  if (text.length() == 0) {
   ((DefaultRowSorter<TableModel, Integer>) rowSorter).setRowFilter(null);
  } else {
   try {
    ((DefaultRowSorter<TableModel, Integer>) rowSorter)
      .setRowFilter(RowFilter.regexFilter(text));
   } catch (PatternSyntaxException pse) {
    System.err.println("erro");
   }
  }
 }
GOSTEI 0
Dyego Carmo

Dyego Carmo

16/10/2009

O que esta acontecendo é;

1) Ele ordena e se perde quando eh para filtrar
2) Ele nao ordena e nao filtra
3) ele filtra mas nao ordena

outra pergunta , neste seu campo que vc digita o filtro... voce esta digitando expressoes regulares ? Estou pergunta porque sua implementacao está para aceitar apenas expressoes regulares...

GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Foi mal era para eu abrir um novo chamado com o titulo Problemas com rowSorter. Ja fiz isto e o Henrique ja respondeu. Manda para mim o exemplo da chave primaria composta que vc citou em post anterior   desculpe a falha!
GOSTEI 0
Dyego Carmo

Dyego Carmo

16/10/2009

Me de seu email para que eu envie o exemplo completo !

GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

israel_jtech@hotmail.com Ve se vc consegue me enviar ainda hoje!   Como disse em mensagem anterior estou utilizando JGoodies  Caso eu necessite fazer algumas adaptações vc pode me ajudar?  
GOSTEI 0
Dyego Carmo

Dyego Carmo

16/10/2009

Meu exemplo esta em swing puro !

Pode ser ?

Para que voce esta usando o JGoodies ? Soh para Layout ? ou tah usando para bind tambem ?
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Tanto para binding quanto para layout. A proposito porque  quase ninguem conhece e utiliza este conjunto de APIs sendo que elas complementam as bibliotecas do swing
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Mas pode mandar o exemplo em Swing mesmo. Acredito que eu consiga adaptar. Ve se tem jeito de mandar ainda hoje no meu email. israel_jtech@hotmail.com
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

E então cade o exemplo. Pede ser em Swing mesmo!
GOSTEI 0
Dyego Carmo

Dyego Carmo

16/10/2009

Eu mandei ao seu email  , nao chegou ?

Verifique a sua lista de spam !
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Não chegou manda de novo por gentileza.
GOSTEI 0
Dyego Carmo

Dyego Carmo

16/10/2009

E agora ? Chegou ? Mandei respondendo seu email !
(mandem ontem)
GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Chegou sim, e ficou muito bom o exemplo. Parabens!!! Estou adaptando ele para utilizar com JGoodies caso seja necessário posso contar com sua ajuda?     Preciso montar uma tela de Backup e Restore utilizando swing e mySql tem como vc montar um exemplo parecido para mim? Se tiver me responda que eu abro um novo chamado para isto.
GOSTEI 0
Dyego Carmo

Dyego Carmo

16/10/2009

Sem duvidas !


Mas estas outras solicitacoes devem ser abertas em, outros chamados diferentes deste ,


Posso estar concluindo este ?

GOSTEI 0
Israel Barbosa

Israel Barbosa

16/10/2009

Perfeito consegui adaptar o código com sucesso !!! Mais uma vez parabéns. O exemplo foi simples e intuitivo.   Pode concluir este chamado
GOSTEI 0
POSTAR