Problemão com lazy

Boa noite Pessoal!

quando eu faço isso:

        AgenteEconomico agente = em.find(AgenteEconomico.class, 104);

o EclipseLink e mesmo o Hibernate (já testei com os dois) ignoram meus LAZY.

eles trazem todos os outros objetos relacionados

carrega tudo

eu criei dois relacionamentos simples conforme apostila da K19, e funciona perfeitamente

não aguento mais analisar e estudar os relacionamentos

por favor, olhem meu código


public class AgenteEconomico implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="gen_agente_economico_id")
    @SequenceGenerator(name="gen_agente_economico_id",sequenceName="seq_agente_economico_id", initialValue=1, allocationSize=1)
    
    @Column(name = "id")
    private Integer id;

    @Column(name = "tipo")
    private String tipo;

    @JoinColumn(name = "pessoa_id")
    @OneToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
    private Pessoa pessoa;

    @OneToMany(cascade = CascadeType.ALL, mappedBy = "agenteEconomico",fetch=FetchType.LAZY)
    private Collection<Imovel> imovelCollection;
public class Pessoa implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="gen_pessoa_id")
    @SequenceGenerator(name= "gen_pessoa_id", sequenceName="seq_pessoa_id", initialValue=1, allocationSize=1)    
    @Column(name = "id")
    private Integer id;

    @Column(name = "nome")
    private String nome;

    @Column(name = "sobre_nome")
    private String sobreNome;

    @Column(name = "idade")
    private Integer idade;

    @OneToOne(mappedBy="pessoa", fetch=FetchType.LAZY)
    @JoinColumn(name = "agente_economico_id", referencedColumnName = "id")
    private AgenteEconomico agenteEconomico;

    @JoinColumn (name="certidao_nascimento_id")
    @OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
    private CertidaoNascimento certidaoNascimento;

    @Column(name = "sexo")
    private String sexo;
public class CertidaoNascimento implements Serializable {
    
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="gen_certidao_nascimento_id")
    @SequenceGenerator(name="gen_certidao_nascimento_id", sequenceName="seq_certidao_nascimento_id", initialValue=1, allocationSize=1)
    private int id;

    @Column(name = "numero")
    private String numero;

    @Column(name = "digito_verificador")
    private String digitoVerificador;

    @Column(name = "data_emissao")
    @Temporal(TemporalType.DATE)
    private Date dataEmissao;

    @Column(name = "cidade_nascimento")
    private String cidadeNascimento;

    @Column(name = "data_nascimento")
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;

    @Column(name = "nome_mae")
    private String nomeMae;

    @Column(name = "nome_pai")
    private String nomePai;
    
    @JoinColumn(name = "pessoa_id", referencedColumnName = "id")
    @OneToOne(mappedBy="certidaoNascimento", fetch=FetchType.LAZY)//por padrão adota o EAGER, não aceita o LAZY
    private Pessoa pessoa;
public class Imovel implements Serializable {
    
    
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="gen_imovel_id")
    @SequenceGenerator(name="gen_imovel_id", sequenceName="seq_imovel_id", initialValue=1, allocationSize=1)
    
    @Column(name = "id")
    private Integer id;

    @Column (name="nome_imovel")
    private String nomeImovel;

    @JoinColumn(name = "agente_economico_id", referencedColumnName = "id")
    @ManyToOne(fetch=FetchType.LAZY)
    private AgenteEconomico agenteEconomico;

    @JoinColumn(name = "endereco_id")
    @OneToOne(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
    private Endereco endereco;
public class Endereco implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="gen_endereco_id")
    @SequenceGenerator(name="gen_endereco_id", sequenceName="seq_endereco_id", initialValue=1, allocationSize=1)
    
    @Column(name = "id")
    private Integer id;

    @Column(name = "logradouro")
    private String logradouro;

    @Column(name = "numero")
    private String numero;

    @Column(name = "complemento")
    private String complemento;

    @Column(name = "bairro")
    private String bairro;

    @Column(name = "caixa_postal")
    private String caixaPostal;

    @JoinColumn(name = "imovel_id", referencedColumnName = "id")
    @OneToOne(mappedBy = "endereco", fetch=FetchType.LAZY)
    private Imovel imovel;

o resultado pelo EclipseLink

SELECT id, tipo, pessoa_id FROM agente_economico WHERE (id = ?)
SELECT id, idade, sobre_nome, sexo, nome, certidao_nascimento_id FROM pessoa WHERE (id = ?)
SELECT ID, nome_mae, data_emissao, cidade_nascimento, digito_verificador, data_nascimento, nome_pai, numero FROM certidao_nascimento WHERE (ID = ?)
SELECT id, idade, sobre_nome, sexo, nome, certidao_nascimento_id FROM pessoa WHERE (certidao_nascimento_id = ?)
SELECT id, tipo, pessoa_id FROM agente_economico WHERE (pessoa_id = ?)

desde já agradeço

Como está seu persitence.xml e ou hibenate.xml ?

Por favor, evite tópicos usando LETRAS MAIÚSCULAS ou pedidos desesperados por atenção.
Procure se informar melhor sobre as regras de etiqueta do fórum (não só desse, mas de todos os fóruns), no link:
http://www.istf.com.br/perguntas/

meu persistence

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="persistencia" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>padrao.AgenteEconomico</class>
    <class>padrao.CertidaoNascimento</class>
    <class>padrao.Endereco</class>
    <class>padrao.Imovel</class>
    <class>padrao.Pessoa</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/postgres"/>
      <property name="javax.persistence.jdbc.password" value="postgres"/>
      <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
      <property name="javax.persistence.jdbc.user" value="postgres"/>
      <property name="eclipselink.logging.level" value="FINE"/>
      <!-- <property name="eclipselink.ddl-generation" value="create-tables"/> -->

    </properties>
  </persistence-unit>
</persistence>

porque nesta linha a palavara FINE tem que ser maiúscula? se as outras são todas minúsculas?

<property name="eclipselink.logging.level" value="FINE"/>

realmente estranho… pelo fetchtype.lazy não deveria fazer isso …

só por desencargo, da um clean no seu projeto, no seu servidor, testa denovo, depois retira o cascadeType.ALL e coloca só persist merge e delete (ficando sem refresh)… e ai limpa ambos denovo e testa…

adiciona o

property name="show-sql" value="true"/>

no seu persistence.xml, vai debugando até chegar a linha

AgenteEconomico agente = em.find(AgenteEconomico.class, 104);  

que vocÊ falou, vai para a próxima linha e confirma a query que foi feita.

o que é dar um clean no projeto?

apagar as tabelas do banco do banco eu já fiz

vou tentar remover o Cascade

debugar? ainda não sei fazer isso, rs

vou ver como é