Ajuda JPA com Herança por subclasse.[RESOLVIDO]

Bom dia galeara, estou tendo dificuldade com Herança usando Annotations, é o seguinte tenho a classe Mãe.

@Entity
@Table(name = "funcionario", catalog = "sitransp")
@Inheritance(strategy = InheritanceType.JOINED)
public class Funcionario implements java.io.Serializable {

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "idFuncionario", unique = true)
        private Integer idFuncionario;

        @OneToOne(mappedBy = "funcionario", fetch = FetchType.LAZY)
        @Cascade(CascadeType.ALL)
        @JoinColumn(name = "idUsuario",insertable = false, updatable = false)
        private Usuario usuario;

        @OneToOne(mappedBy = "funcionario")
        @Cascade(CascadeType.ALL)
        @JoinColumn(name = "idMotorista", insertable = false, updatable = false)
	private Motorista motorista;
//getters e setters

e as classes filhas,

@Entity
@Table(name = "usuario", catalog = "sitransp")
@PrimaryKeyJoinColumn(name = "Funcionario_idFuncionario")
public class Usuario extends Funcionario implements Serializable {

        /**/@OneToOne(mappedBy = "usuario", fetch = FetchType.LAZY)
        @JoinColumn(name = "idFuncionario", referencedColumnName = "idFuncionario")
	private Funcionario funcionario;
//getters e setters

e,

@Entity
@Table(name = "motorista", catalog = "sitransp")
@PrimaryKeyJoinColumn(name = "idFuncionario")
public class Motorista extends Funcionario implements Serializable {


        @OneToOne(mappedBy = "motorista", fetch = FetchType.LAZY)
        @JoinColumn(name = "idFuncionario", referencedColumnName = "idFuncionario")
        @OneToOne
	private Funcionario funcionario;
//getters e setters

eu criei uma classe teste, onde verifico se esta sendo inserido corretamente


public static void main(String[] args) {
       Session session;
//linha 35 
       session = new AnnotationConfiguration().configure(PathConfHibernate.doPath()).buildSessionFactory().openSession();
       //session = sessionFactory.openSession();
       Transaction tx = session.beginTransaction();
      
       Usuario usuario = new Usuario();
       Motorista motorista = new Motorista();
       TpUsuario tpUsuario = new TpUsuario();
       MotoristaDaoImpl motoDaoImpl = new MotoristaDaoImpl(session);
       UsuarioDaoImpl usDao= new UsuarioDaoImpl(session);
       //TipoUsuario tp = TipoUsuario.COMUM.getDesc() ;

       Departamento dep = new Departamento();
       dep.setNome("Academico");
       usuario.setNome("Ataulfo Alves");
       usuario.setMatricula(201022);

       usuario.setDepartamento(dep);
       //usuario.setTpusuario(tpUs);
       motorista.setMatricula(20100607);
       motorista.setNome("Galileu Galilei");
       motorista.setCnh(123456);
       motorista.setEmail("galileu@gmail.com");
       dep.setNome("Academico");
       motorista.setDepartamento(dep);
       
       motoDaoImpl.save(motorista);

       usDao.save(usuario);
       tx.commit();
       session.close();
      

contudo, quando executo a classe apresenta erro de nullpointer no relacionamento OneToOne dos mapeamentos da Herança,


Exception in thread "main" java.lang.NullPointerException
        at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:135)
        at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1130)
        at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:296)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
        at br.sitransp.teste.Teste.main(Teste.java:35)
Java Result: 1

alguem ai poderia dar um help!

URGENTE!!!

Ninguém aqui é pago para responder velhinho… justamente por isto o pessoal quando vê esta palavra pula o tópico :wink: (Isto lembra o meu chefe)

Não parece ser erro de hibernate, pois acredito que nem chegou a gerar a ddl, debugando o que vc ve que está nulo?

Acredito que é este…

O que ele faz?

Ai brother, desculpe pelo “Urgente”, mas é porque realmente é importante que eu consiga fazer isso neste FDS, e sei que ninguem aqui tem a obrigação de responder e nem é pago para isso, fazem isso porque querem ajudar aos que procurarm!
quanto ao

PathConfHibernate.doPath() 

ele busca as configurações do hibernate.cgf, que estão em um pacote, dentro do src.

Bom dia Pessoal, consegui resolver o problema.
eu tinha errado na forma como o mapeamento esta definindo as inserções/alterações no banco.

@Entity
@Table(name = "funcionario", catalog = "sitransp")
@Inheritance(strategy = InheritanceType.JOINED)
public class Funcionario implements java.io.Serializable {

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Column(name = "idFuncionario", unique = true)
        private Integer idFuncionario;
        //aqui estava errado
        @OneToOne(mappedBy = "funcionario", fetch = FetchType.LAZY)
        @Cascade(CascadeType.ALL)
        private Motorista motorista;
@Entity
@Table(name = "motorista", catalog = "sitransp")
@PrimaryKeyJoinColumn(name = "idFuncionario")
public class Motorista extends Funcionario implements Serializable {

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

        @Temporal(value = TemporalType.TIMESTAMP)
        @Column(name = "validadeCnh", length = 19)
	private Date validadeCnh;

        @OneToMany(mappedBy= "motorista", fetch = FetchType.LAZY)
	private List<Checkup> checkup;

        @OneToMany(mappedBy = "motorista", fetch = FetchType.LAZY)
	private List<SolicVeiculo> solicVeiculos;
   
        //aqui tambem estava errado
        @OneToOne(fetch = FetchType.LAZY)
        @JoinColumn(referencedColumnName="idFuncionario",insertable=false,updatable=false)
        @Cascade(CascadeType.ALL)
        @Fetch(FetchMode.JOIN)
        private Funcionario funcionario;

ai esta a solução.

Coloca como resolvido :wink:

BLZ!