ADD CONSTRAINT pk_marca PRIMARY KEY (id); ALTER TABLE produto ADD CONSTRAINT fk_marca_produto FOREIGN KEY (marca) REFERENCES marca (id) ON DELETE NO ACTION ON UPDATE NO ACTION; Criado o banco de dados, iremos agora criar um novo projeto com o StrutsTool. O comando para realizar esta operacao e simples: strutstool new project loja com.app.web Este comando cria o projeto base dentro da pasta loja/. Agora vamos criar o que realmente interessa nesta aplicacao atraves do scaffolding. Primeiro vamos criar os providers (view, modelo e controlador) para a classe Produto, assim: strutstool scaffold Produto nome:string:100 marca:Marca Apos executar o comando devera aparecer na tela todos os arquivos e pastas criados e/ou modificados. Vale ressaltar que o metodo scaffold parte da premissa de que o identificador da tabela e chamado id, sendo este um valor inteiro e auto-incremento (ou que use uma sequence, como neste caso (consulte a documentacao do Hibernate)). Outro aspecto importante e o das convencoes adotadas pela ferramenta. No caso do Produto, e assumido (por padrao, voce pode alterar) que o nome da tabela e produto e ela tem, alem da chave primaria id, um campo chamado nome de tamanho 100. Alem disso, e criado um controlador chamado ProdutoController com as actions: index, edit, add e delete. E nas views (pasta web/WEB-INF/) e criada a pasta produto com as paginas: index.jsp, edit.jsp e add.jsp (delete utiliza jQuery). A url para acesso a action index, por exemplo, ficaria assim: http://localhost:8084/loja/produto/index.action. Estas sao convencoes basicas adotadas em varias frameworks conhecidas, exceto o Struts (alem de outros frameworks Java), mas que atraves desta ferramenta poupam o desenvolvedor de configurar mais do que o necessario. Agora vamos gerar os providers da classe Marca. Para tanto: strutstool scaffold Marca nome:string:100 produtos:set:Produto Aqui adicionamos mais um atributo a classe, produtos:set:Produto, que corresponde ao relacionamento um para muitos (one-to-many) com a classe de Produto (uma marca tem varios produtos). O set do atributo corresponde ao tipo de Collection do Java java.util.Set. Este e o unico tipo de colecao suportado pela ferramenta (nao consegui fazer List funcionar com o Hibernate). Por padrao, a ferramenta gera relacionamentos em duas direcoes, portanto a classe Produto podera acessar a marca a qual pertence, bem como uma marca podera acessar todos os seus produtos. Para quem notou, a ferramenta nao checa os tipos de dados utilizados nos parametros. A bem da verdade, ela possui uma lista com os tipos basicos suportados e quando um tipo e desconhecido ela trata-o como um novo tipo, portanto cuidado ao informar os tipos de dados. Outra funcionalidade que preferi desativar era a checagem das classes existentes. Neste exemplo a classe Produto referencia a classe Marca, sendo que esta ultima nem sequer existe ainda. Porem, me pareceu mais pratico deixar a cargo do programador cuidar destes detalhes. Por equanto esta ferramenta suporta apenas relacionamentos um para muitos (1:n) e muitos para um (n:1). Relacionamentos muitos para muitos (n:m) podem ser feitos com dois relacionamentos um para muitos. Agora que a aplicacao foi gerada, e hora de abri-la com o NetBeans e fazer algumas modificacoes. Basta ir em Abrir Projeto...