Oie pessoal tudo bem?
Estou com um probleminha que nao consigo resolver de jeito nenhum.
1 - Eu tenho uma lista (detalhe) dentro de um objeto (mestre) qualquer.
2 - Quando eu carrego o mestre na tela, a minha tabela referente ao detalhe nao carrega.
3 - Rodei em modo debug e constatei que realmente o meu list é vazio (size = 0).
Alguém sabe o que pode estar ocorrendo?
Observação: quando estou gravando, a minha lista é populada perfeitamente, fazendo com que ao persistir o mestre, o(s) detalhe(s) tambem sejam persistidos @Cascade;
Observação 2: Já testei fetch EAGER e LAZY mas nao deram certo.
posta as entidades com os relacionamentos e a consulta
@lucciano01
O meu select é um findAll() mesmo, em que eu populo uma tabela que contem todas as vendas…
Classe Venda:
@Entity
public class Venda implements Serializable {
@Id
@Column(name = "ID_VENDA", nullable = false)
private Long idVenda;
// Varios atributos que nao tem relevancia neste caso ....
@OneToMany(targetEntity = Produto.class, fetch = FetchType.EAGER, mappedBy = "venda")
// @OneToMany(targetEntity = Produto.class, fetch = FetchType.LAZY, mappedBy = "venda")
@Cascade(org.hibernate.annotations.CascadeType.ALL)
private List<Produto> produtos;
// getters and setters
Classe Produto:
@Entity
public class Produto implements Serializable {
@Id
@Column(name = "ID_PRODUTO")
private Long idProduto;
// Varios atributos que nao tem relevancia neste caso ....
@ManyToOne
@JoinColumn(name = "ID_VENDA")
private Venda venda;
// getters and setters
`tenta isso:
select v from Venda v join fetch v.produtos as vp
`
Mas o @Join ja nao deveria me garantir isto?
verdade, o join é feito "automaticamente" pelo relacionamento, mas vms tentar forçar a barra pra ver se traz algum resultado, porque até então seu mapeamento está correto
dá uma olhada tb se todos os seus imports estão vindo do pacote javax.persistence
@lucciano01 eu identifiquei uma coisa.
Apesar de quando eu persisto a Venda os Produtos tambem estarem sendo persistidos, eles estao sem a referencia da Venda, ou seja, sem o idVenda informado. Entao o erro é na hora que estou salvando a Venda, sabe o que pode ser baseado nas minhas entidades e relacionamentos?
Nada de anormal (nao acusa nenhum erro e persiste sem problemas)
A unica coisa que me chamou certa atencao foi ter que colocar o caminho explícito do CascadeType
@Cascade(org.hibernate.annotations.CascadeType.ALL)
`tenta isso:
import javax.persistence.CascadeType;
@OneToMany(targetEntity = Produto.class, fetch = FetchType.EAGER, mappedBy = “venda”, cascade = CascadeType.ALL)
private List< Produto> produtos;
`
Mesmo resultado!
Persiste a Venda e o(s) Produto(s) mas sem a referencia da venda no segundo (produtos)
To ficando doida ja kk
`cancela a implantação no servidor e manda limpar e construir o projeto novamente, se as tabelas não estiverem muito populadas o ideal seria apaga-las e veja se esta propriedade esta no persistence.xml
< property name=“hibernate.hbm2ddl.auto” value=“update”/>
`
A property está ok tambem.
Nao sei o que pode estar ocorrendo
vc fez o undeploy da aplicação no servidor? aproveita e limpa o cache do navegador tb
Ja sim! Nada resolvido.
Estava pesquisando em alguns foruns em ingles tambem e será que a forma com que eu estou persistindo os dados pode fazer alguma diferença neste caso? Por exemplo, se no salvar eu usar o persist() ao inves do merge()
a diferença entre o merge e o persist é que o merge verifica se a entidade já existe, caso não ele salva, do contrário ele atualiza
Pois é acho que ja nao sei o que fazer e estou perdendo o foco do problema.
é assim mesmo, mas vai dar certo, programação tira a gente do sério as vezes
`retira o targetEntity da anotação
está sendo criada a tabela de relacionamenteo venda_produto?
`