Autor |
Mensagem |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 16/08/2007 21:19:45
|
rogel.garcia
Xiita
Membro desde: 17/04/2007 16:35:03
Mensagens: 275
Offline
|
O NEO permite, o problema acontece é só com o hibernate mesmo...
Não tem interferencia do neo nesse caso...
Nós já enfrentamos vários problemas com o hibernate.. por isso recomendamos o padrao.. para evitar tais problemas..
O hibernate tem muitas falhas...
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 27/09/2007 14:24:18
|
valdecijunior
Equipe
Membro desde: 23/06/2007 11:56:42
Mensagens: 24
Localização: Vitoria da Conquista - Ba
Offline
|
Boa tarde galera...
estou tendo problemas para implementar um crud master-detalhe em três níveis. Tenho a seguinte estrutura:
ENTIDADE
SECRETARIAS
DEPARTAMENTOS
e gostaria de implementar essa estrutura usando master-detalhe. A parte de Secretaria e Departamento já está pronta. Como era só dois níveis não houve problemas.... usei tag t:detalhe e tudo ok. Veja:
POJO:
Code:
@Entity
@Table(name="SECRETARIA")
@PrimaryKeyJoinColumn(name="CD_SECRETARIA")
public class Secretaria extends Unidade {
private static final long serialVersionUID = 1L;
private Entidade entidade;
private List<Departamento> departamentos;
// get's and set's
DAO
Code:
public class SecretariaDAO extends GenericDAO <Secretaria>{
@Override
public void updateEntradaQuery(QueryBuilder<Secretaria> query) {
query.fetchCollection("departamentos");
}
@Override
public void updateSaveOrUpdate(SaveOrUpdateStrategy save) {
save.saveOrUpdateManagedNormal("departamentos");
}
}
JSP
Code:
<%@ taglib prefix="n" uri="neo"%>
<%@ taglib prefix="t" uri="template"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<t:entrada>
<t:janelaEntrada>
<t:tabelaEntrada>
<t:property name="codigo"/>
...
<t:property name="endereco"/>
</t:tabelaEntrada>
<t:detalhe name="departamentos">
<t:property name="mascara" label="Código"/>
<t:property name="nome"/>
</t:detalhe>
</t:janelaEntrada>
</t:entrada>
No caso teria que fazer isso partindo de Entidade:
Code:
@Entity
@Table(name="ENTIDADE")
@PrimaryKeyJoinColumn(name="CD_ENTIDADE")
public class Entidade extends Unidade {
private static final long serialVersionUID = 1L;
public enum Tipo {PREFEITURA, CAMARA, AUTARQUIA, FUNDACAO}
private String CNPJ;
private Tipo tipo;
private List<Secretaria> secretarias;
....
// get's and set's
Veja que em entidade não tem nada a respeito de departamento, essa é uma informação de Secretaria...
como ficaria a implementação do DAO e do JSP?
cheguei a tentar implementar sem usar a t:detalhe conforme http://www.neoframework.org/forum/posts/list/142.page mas ficaria ruim pois, se entendi direito, o usuário teria a opção de cadastrar apenas uma secretaria por vez...
estou aberto também a soluções alternativas para o problema... na verdade preciso mostrar isso funcionando amanhã para um cliente... logo qualquer ajuda é bem vinda rsrs
um abraço vlw
|
Valdeci Junior
MasterSoft Sistemas Ltda.
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 27/09/2007 22:29:57
|
pedro.goncalves
Equipe
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline
|
Valdeci, infelizmente o Neo ainda não suporta detalhe dentro de detalhe, o segundo você terá que tratar na mão.
Mais podemos pensar em implementar isso. A classe responsável é a Saveorupdate Strategy..
Té!
|
Pedro Gonçalves
http://pedrogoncalves.com.br
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 28/09/2007 11:06:13
|
vinicius.janones
Template
![[Avatar]](/forum/images/avatar/182be0c5cdcd5072bb1864cdee4d3d6e.jpg)
Membro desde: 25/06/2007 12:55:10
Mensagens: 105
Localização: Uberlândia - MG
Offline
|
rogel.garcia wrote:
Fala valdeci... sempre tentamos responder assim que lemos os posts.. às vezes nem sempre é possível pos estamos trabalhando ou fazendo alguma atividade.. mas a idéia é responder sempre e o mais rápido possível..
sobre sua dúvida.. o neo tem um suporte a master/detalhe...
mas apenas para o jsp de entrada de dados.. para a listagem nao tem nenhum componente faclitador..
para a entrada de dados.. vc faria o seguinte
Code:
<t:entrada>
<t:janelaEntrada>
<t:tabelaEntrada>
<t:property name="..."/>
</t:tabelaEntrada>
<t:detalhe property="nome da propriedade detalhe">
<t:property name="..."/>
</t:detalhe>
</t:janelaEntrada>
</t:entrada>
Se vc tem um bean assim:
Code:
class Principal {
String nome;
List<Detalhe> listaDetalhe; //relacionamento one to many
}
class Detalhe {
Integer valor;
Principal principal; //relacionamento many to one
}
(lembre-se dos getters e setters e das annotations para configurar o hbernate)
Seu jsp ficaria assim:
Code:
<t:entrada>
<t:janelaEntrada>
<t:tabelaEntrada>
<t:property name="nome"/>
</t:tabelaEntrada>
<t:detalhe property="listaDetalhe">
<t:property name="valor"/>
</t:detalhe>
</t:janelaEntrada>
</t:entrada>
no seu dao<Principal> vc teria que extender o método updateSaveOrUpdate assim:
Code:
public void updateSaveOrUpdate(SaveOrUpdateStrategy save) {
save.saveOrUpdateManaged("listaDetalhe");
}
e também o updateEntradaQuery
Code:
public void updateEntradaQuery(QueryBuilder<Principal> query) {
query.fetchCollection("listaDetalhe");
}
pronto..
é necessário atualizar o dao para carregar e salvar o detalhe...
no jsp a tag detalhe monta um datagrid com botoes para manipular os itens do detalhe...
Rogel
Bom dia,
Me tira uma dúvida por favor, fiz este exemplo que vc mostrou mas quando mando salvar ele da o seguinte erro:
Code:
* Hibernate operation: could not insert: [bean.OrcamentoServico]; SQL [insert into sis.orcamentoservico (observacao, orcamento_id, servico_id, valor) values (?, ?, ?, ?)]; Column 'orcamento_id' cannot be null; nested exception is com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Column 'orcamento_id' cannot be null
o Integridade de dados violada
o Column 'orcamento_id' cannot be null
O NEO não trata esse tipo de situação?
Abraços
|
Vinícius O. Janones
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 28/09/2007 11:27:11
|
vinicius.janones
Template
![[Avatar]](/forum/images/avatar/182be0c5cdcd5072bb1864cdee4d3d6e.jpg)
Membro desde: 25/06/2007 12:55:10
Mensagens: 105
Localização: Uberlândia - MG
Offline
|
Rogel,
Quando abri a listagem após dar o erro anterior que postei, vi que o NEO tinha cadastrado somente o orçamento, agora as peças que cadastrei deram erro mesmo, mas ao clicar em editar ele gerou esse erro:
Code:
failed to lazily initialize a collection of role: bean.Orcamento.pecas, no session or session was closed
E ainda deixou a tela toda desconfigurada...
|
Vinícius O. Janones
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 28/09/2007 12:06:12
|
vinicius.janones
Template
![[Avatar]](/forum/images/avatar/182be0c5cdcd5072bb1864cdee4d3d6e.jpg)
Membro desde: 25/06/2007 12:55:10
Mensagens: 105
Localização: Uberlândia - MG
Offline
|
O erro do editar eu achei... eu tinha feito no mapeamento assim:
Code:
cascade=CascadeType.ALL, fetch=FetchType.LAZY
Foi só remover essas opções e funcionou...
Mas quanto ao erro dos indices, por acaso posso fazer um Override no método saveOrUpdate no OrcamentoService para resolver isso?
|
Vinícius O. Janones
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 28/09/2007 13:02:38
|
pedro.goncalves
Equipe
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline
|
Utilize o método updateSaveOrUpdate para isto.
|
Pedro Gonçalves
http://pedrogoncalves.com.br
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 28/09/2007 15:33:53
|
vinicius.janones
Template
![[Avatar]](/forum/images/avatar/182be0c5cdcd5072bb1864cdee4d3d6e.jpg)
Membro desde: 25/06/2007 12:55:10
Mensagens: 105
Localização: Uberlândia - MG
Offline
|
Pedro,
Consegui aqui... ficou bacana.
A[]s
|
Vinícius O. Janones
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 30/09/2007 21:28:01
|
pedro.goncalves
Equipe
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline
|
vlw!
|
Pedro Gonçalves
http://pedrogoncalves.com.br
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 04/10/2007 15:46:34
|
alexcampos
Equipe
![[Avatar]](/forum/images/avatar/72b32a1f754ba1c09b3695e0cb6cde7f.jpg)
Membro desde: 26/09/2007 11:13:14
Mensagens: 7
Offline
|
rogel.garcia wrote:
...
no seu dao<Principal> vc teria que extender o método updateSaveOrUpdate assim:
Code:
public void updateSaveOrUpdate(SaveOrUpdateStrategy save) {
save.saveOrUpdateManaged("listaDetalhe");
}
e também o updateEntradaQuery
Code:
public void updateEntradaQuery(QueryBuilder<Principal> query) {
query.fetchCollection("listaDetalhe");
}
pronto..
é necessário atualizar o dao para carregar e salvar o detalhe...
no jsp a tag detalhe monta um datagrid com botoes para manipular os itens do detalhe...
pessoal.... estou tentando fazer um detail por aqui mas depois que eu sobrescrevi os métodos do meu "dao<principal>" a tela de edição do meu "principal" passou apresentar o seguinte erro:
Code:
* Erro ao inicializar Proxys (Coleções). br.com.linkcom.neo.controller.crud.CrudController.carregar(CrudController.java:264)
o Erro ao tentar fazer fetch de listaImoveis em sca.proprietario.Proprietario
o could not initialize a collection: [sca.proprietario.Proprietario.listaImoveis#1]
o Table 'sca.proprietario_imovel' doesn't exist
no meu caso o objeto principal é "Proprietario" que tem uma ligação OneToMany com meu Detalhe, que é Imóvel (ManyToOne com Proprietario).
alguém tem alguma idéia de como resolver isso?
valeuz...
[]'s
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 04/10/2007 20:16:53
|
pedro.goncalves
Equipe
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline
|
Manda o seu Bean e seu dao.
|
Pedro Gonçalves
http://pedrogoncalves.com.br
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 05/10/2007 15:00:13
|
alexcampos
Equipe
![[Avatar]](/forum/images/avatar/72b32a1f754ba1c09b3695e0cb6cde7f.jpg)
Membro desde: 26/09/2007 11:13:14
Mensagens: 7
Offline
|
Proprietário.java
Code:
@Entity
public class Proprietario implements Serializable {
private Long id;
private String nome;
private Cpf cpf;
private List<Imovel> listaImoveis;
public Proprietario() {
}
public Proprietario(Long codProprietario) {
this.id = codProprietario;
}
@OneToMany
public List<Imovel> getListaImoveis() {
return listaImoveis;
}
public void setListaImoveis(List<Imovel> listaImoveis) {
this.listaImoveis = listaImoveis;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
...
ProprietarioDAO.java
Code:
public class ProprietarioDAO extends GenericDAO<Proprietario> {
@Override
public void updateSaveOrUpdate(SaveOrUpdateStrategy query) {
query.saveOrUpdateManaged("listaImoveis");
}
@Override
public void updateListagemQuery(QueryBuilder<Proprietario> query, FiltroListagem _filtro) {
ProprietarioFiltro filtro = (ProprietarioFiltro) _filtro;
query.whereLike("proprietario.nome", filtro.getNome())
.where("proprietario.cpf = ?", filtro.getCpf());
}
@Override
public void updateEntradaQuery(QueryBuilder<Proprietario> query) {
query.fetchCollection("listaImoveis");
}
}
Imovel.java
Code:
@Entity
public class Imovel implements Serializable {
private Long id;
private String nome;
private TipoImovel tipo;
...
private Proprietario proprietario;
public Imovel() {
}
public Imovel(Long id) {
this.id = id;
}
public Imovel(Long id, String nome, int tipo, Money valorCondominio) {
this.id = id;
this.nome = nome;
// this.tipo = tipo;
this.valorCondominio = valorCondominio;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToOne(fetch=FetchType.LAZY)
public Proprietario getProprietario() {
return proprietario;
}
public void setProprietario(Proprietario proprietario) {
this.proprietario = proprietario;
}
...
ImovelDAO.java
Code:
public class ImovelDAO extends GenericDAO<Imovel> {
@Override
public void updateListagemQuery(QueryBuilder<Imovel> query, FiltroListagem _filtro) {
ImovelFiltro filtro = (ImovelFiltro) _filtro;
query.whereLike("imovel.nome", filtro.getNome())
.where("imovel.tipo = ?", filtro.getTipo());
}
}
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 05/10/2007 20:37:29
|
pedro.goncalves
Equipe
Membro desde: 17/04/2007 16:12:20
Mensagens: 539
Localização: Belo Horizonte - MG
Offline
|
alex..
o seu mapeamento está errado..
o correto é assim:
Code:
@OneToMany(mappedBy = "proprietario")
public List<Imovel> getListaImoveis() {
return listaImoveis;
}
|
Pedro Gonçalves
http://pedrogoncalves.com.br
 |
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 08/10/2007 10:46:45
|
alexcampos
Equipe
![[Avatar]](/forum/images/avatar/72b32a1f754ba1c09b3695e0cb6cde7f.jpg)
Membro desde: 26/09/2007 11:13:14
Mensagens: 7
Offline
|
isso ai velho!
valeu msm!!
[]'s
|
|
 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 30/10/2007 17:15:07
|
tlink.k
Equipe
![[Avatar]](/forum/images/avatar/093f65e080a295f8076b1c5722a46aa2.jpg)
Membro desde: 28/09/2007 16:06:19
Mensagens: 12
Offline
|
Olá, eu to fazendo um projeto de pesquisa na faculdade e "empaquei"....
provavelmente ja foi respondido tvz de alguma outra forma, mas nao estou conseguindo fazer/entender (comecei a pouco tempo com programacao para WEB e com NEO)
tenho tres classes ( Tecnico, Propriedade, e PropriedadeTecnico)
Tecnico
Code:
private Long codigo;
...
private Collection<PropriedadeTecnico> propriedadeTecnicoCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "tecnico")
public Collection<PropriedadeTecnico> getPropriedadeTecnicoCollection() {...}
TecnicoDAO
Code:
public class TecnicoDAO extends GenericDAO<Tecnico>{
@Override
public void updateEntradaQuery(QueryBuilder<Tecnico> query) {
query.fetchCollection("propriedadeTecnicoCollection");
}
@Override
public void updateSaveOrUpdate(SaveOrUpdateStrategy save) {
save.saveOrUpdateManagedNormal("propriedadeTecnicoCollection");
}
}
tecnicoEntrada.jsp
Code:
<t:entrada>
<t:janelaEntrada>
<t:tabelaEntrada>
<t:property name="codigo"/>
<t:property name="nome"/>
....
</t:tabelaEntrada>
<t:detalhe name="propriedadeTecnicoCollection">
<t:property name="propriedade"/>
<t:property name="tecnico"/>
</t:detalhe>
</t:janelaEntrada>
</t:entrada>
PropriedadeTecnico
Code:
private Long codigo;
private Short disponibilidade;
private Propriedade propriedade;
private Tecnico tecnico;
@ManyToOne
public Propriedade getPropriedade() {...}
@ManyToOne
public Propriedade getTecnico() {...}
Propriedade
Code:
private Long codigo;
...
private Collection<PropriedadeTecnico> propriedadeTecnicoCollection;
private Collection<Viveiro> viveiroCollection;
...
@OneToMany(cascade = CascadeType.ALL, mappedBy = "propriedade")
public Collection<PropriedadeTecnico> getPropriedadeTecnicoCollection() {
propriedadeEntrada.jsp
Code:
<t:entrada>
<t:janelaEntrada>
<t:tabelaEntrada>
<t:property name="codigo"/>
<t:property name="area"/>
<t:property name="distancia"/>
</t:tabelaEntrada>
</t:janelaEntrada>
</t:entrada>
agradeço a atençao
...
flw
|
|
 |
|