Salve Gujeiros!
Seguinte:
Tenho duas classes: Pessoa e PessoaEmail
Pessoa
[code]@Entity
@NamedQueries({
@NamedQuery(name=“getClientes”, query=“from Pessoa order by idPessoa”),
)
@Table(name = “pessoa”, schema = “public”)
@SequenceGenerator(name=“PESSOA_SEQ”, sequenceName=“pessoa_id_pessoa_seq”, allocationSize=1)
public class Pessoa implements java.io.Serializable {
@UIHiddenField(column = 10, line = 0)
@Id
@Column(name = "id_pessoa", unique = true, nullable = false, length = 14)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PESSOA_SEQ")
public Integer getIdPessoa() {
	return this.idPessoa;
}
public void setIdPessoa(Integer idPessoa) {
	this.idPessoa = idPessoa;
}
@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "cliente")
public Cliente getCliente() {
	return this.cliente;
}
public void setCliente(Cliente cliente) {
	this.cliente = cliente;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pessoa", cascade = CascadeType.ALL)
public List<PessoaEmail> getPessoaEmails() {
	return this.pessoaEmails;
}
public void setPessoaEmails(List<PessoaEmail> pessoaEmails) {
	this.pessoaEmails = pessoaEmails;
}
}[/code]
PessoaEmail
[code]@Entity
@Table(name = “pessoa_email”, schema = “public”, uniqueConstraints = @UniqueConstraint(columnNames = “email”))
@SequenceGenerator(name=“PESSOA_EMAIL_SEQ”, sequenceName=“pessoa_email_id_pessoa_email_seq”, allocationSize=1)
public class PessoaEmail implements java.io.Serializable {
@Id
@Column(name = "id_pessoa_email", unique = true, nullable = false)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="PESSOA_EMAIL_SEQ")
public int getIdPessoaEmail() {
	return this.idPessoaEmail;
}
public void setIdPessoaEmail(int idPessoaEmail) {
	this.idPessoaEmail = idPessoaEmail;
}
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "pessoa", nullable = false)
public Pessoa getPessoa() {
	return this.pessoa;
}
public void setPessoa(Pessoa pessoa) {
	this.pessoa = pessoa;
}
}
[/code]
Tenho o seguinte método que lê os dados de um txt e salva a entidade Pessoa e a entidade PessoaEmail.
[code]public Boolean importaEmails(String arquivoFonte) {
PessoaRepository pr = BeanFactory.getPessoaRepository(em);
while ((registro = readRegistro()) != null) {
boolean atualizar = false;
            // busca pessoa no banco
	Pessoa p = pr.getPessoaFisicaJuridica(registro[1]);
	List<PessoaEmail> pessoaEmail = null;
            // busca List<PessoaEmail> do relacionamento @OneToMany
	pessoaEmail = p.getPessoaEmails();
	if (pessoaEmail != null && pessoaEmail.size() > 0){
		temEmailCadastrado = true;
	}
			
	if (temEmailCadastrado) {
		atualizar = true;
	}
	if (!atualizar) {
		PessoaEmail pm = new PessoaEmail();
		pm.setNome("nfe");
		pm.setEmail(registro[2]);
		pm.setPessoa(p);
		if (salva(pm)) {
			logger.debug("Email importado: " + registro[1]);
		} else {
			logger.debug("Erro ao gravar Pessoa: " + registro[1]);
		}
	} else {
		PessoaEmail pm = pessoaEmail.get(0);
		pm.setEmail(registro[2]);
		
		em.getTransaction().begin();
		PessoaEmail pessoaEmailRet = em.merge(pm);
		em.getTransaction().commit();
		if (pessoaEmailRet != null) {
			logger.debug("Email atualizado: " + registro[2]);
		} else {
			logger.debug("Erro ao atualizar PessoaEmail: " + registro[1]);
		}
	}
}
fecha();
return Boolean.TRUE;
}
  public boolean salva(Object arg){
	try{
		tx.begin();
		em.persist(arg);
		tx.commit();
	}
	catch (Exception e){}
 }
[/code]
O problema é que durante a importação, o método p.getPessoaEmails(); não retorna a List.
Mas se após a importação eu chamar o método novamente, ele retorna a lista normalmente.
Isto seria um problema do hibernate?
Do EntityManager?
Já fiz alterações de EAGER e LAZY nos relacionamentos porém não obtive sucesso.
Se alguém puder ajudar, agradeço.
Abraços.
