Exclusão com Hibernate

Boa noite galera. Seguinte, tenho as duas classes abaixo:

Pessoa

@Entity
@Table(name = "pessoa")
@NamedQueries({
    @NamedQuery(name = "Pessoa.findAll", query = "SELECT p FROM Pessoa p ORDER BY p.pesNome"),
    @NamedQuery(name = "Pessoa.findByPesId", query = "SELECT p FROM Pessoa p WHERE p.pesId = :pesId"),
    @NamedQuery(name = "Pessoa.findByPesNome", query = "SELECT p FROM Pessoa p WHERE p.pesNome LIKE :pesNome"),
    @NamedQuery(name = "Pessoa.findByPesDataNasc", query = "SELECT p FROM Pessoa p WHERE p.pesDataNasc = :pesDataNasc")
})
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    @Column(name = "PesId")
    private Integer pesId;
    @Column(name = "PesNome")
    private String pesNome;    
    @Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "PesDataNasc")
    private Date pesDataNasc;
    @Column(name = "PesTipo")
    private String pesTipo;
    @OneToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CategPesId")
    private CategPes categPes;    
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "PesId")
    private List<Endereco> endList;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "PesId")
    private List<Contato> contList;
    .
    .
    .

Endereco

@Entity
@Table(name = "endereco")
@NamedQueries({
    @NamedQuery(name = "Endereco.findAll", query = "SELECT e FROM Endereco e"),
    @NamedQuery(name = "Endereco.findByEndId", query = "SELECT e FROM Endereco e WHERE e.endId = :endId"),
    @NamedQuery(name = "Endereco.findByEndLograd", query = "SELECT e FROM Endereco e WHERE e.endLograd = :endLograd"),
    @NamedQuery(name = "Endereco.findByEndNum", query = "SELECT e FROM Endereco e WHERE e.endNum = :endNum"),
    @NamedQuery(name = "Endereco.findByEndComplem", query = "SELECT e FROM Endereco e WHERE e.endComplem = :endComplem"),
    @NamedQuery(name = "Endereco.findByEndCep", query = "SELECT e FROM Endereco e WHERE e.endCep = :endCep"),
    @NamedQuery(name = "Endereco.findByEndBairro", query = "SELECT e FROM Endereco e WHERE e.endBairro = :endBairro"),
    @NamedQuery(name = "Endereco.findByEndPtoRef", query = "SELECT e FROM Endereco e WHERE e.endPtoRef = :endPtoRef")
})
public class Endereco implements Serializable {
    @Transient
    private PropertyChangeSupport changeSupport = new PropertyChangeSupport(this);
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    @Column(name = "EndId")
    private Integer endId;
    @Column(name = "EndLograd")
    private String endLograd;
    @Column(name = "EndNum")
    private String endNum;
    @Column(name = "EndComplem")
    private String endComplem;
    @Column(name = "EndCep")
    private String endCep;
    @Column(name = "EndBairro")
    private String endBairro;
    @Column(name = "EndPtoRef")
    private String endPtoRef;
    @Column(name = "endTipo")
    private String endTipo;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CidId")
    private Cidade cidId;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "PesId")
    private Pessoa pesId;
    .
    .
    .

Quando tento excluir uma pessoa, ele retorna o seguinte erro: [color=red]ERROR util.JDBCExceptionReporter: Coluna ‘PesId’ não pode ser vazia[/color], mas quando eu debugo, ele mostra que o atributo pesId do Endereco está carregado.

Se alguém puder ajudar, agradeço muito!

Abraço

Posta o código da exclusão da pessoa.

manager.remove(pessoa);

Obs.: manager = EntityManager

Então cara, posta o código completo da exclusão. Posta o método inteiro.

Segue o método de exclusão

public void delete() {
        TransactionCtrl transactionCtrl = new TransactionCtrl(manager) {
            @Override
            public void transactionalBlock() {
                manager.remove(pessoa);
            }
        };
        
        transactionCtrl.execute();
}

e aqui a classe TransactionCtrl que tem um método implementado acima

public abstract class TransactionCtrl {
    protected EntityManager manager;

    public TransactionCtrl(EntityManager manager) {
        this.manager = manager;
    }
    
    public void execute() {
        EntityTransaction transaction = null;
        
        try {
            transaction = manager.getTransaction();
            
            transaction.begin();            
            transactionalBlock();            
            transaction.commit();
        } catch (Exception e) {
            if(transaction != null && transaction.isActive())
                transaction.rollback();
            
            JOptionPane.showMessageDialog(null, e);
        }
    }
    
    public abstract void transactionalBlock();
}