Mapeamento OneToMany

I’m trying to do a one-way mapping but it’s null

Class TabDisc

@Id // disciplina 
@GeneratedValue(strategy = GenerationType.AUTO, generator = "academico.seq_tabdisc")
@SequenceGenerator(allocationSize = 1, name = "academico.seq_tabdisc", sequenceName = "academico.seq_tabdisc")
@Column(name = "coddisc")
private Integer coddisc; // codigo de descrição
@Column(name = "desdisc")
private String desdisc; // descrição
@Column(name = "hordisc")
private Integer hordisc; // carga horaria
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER )
@JoinColumn(name = "codcurs", referencedColumnName = "codcurs")
private List<TabCurs> codcurs = new ArrayList<>();
@Column(name = "atiesta")
private Integer atiesta;
@Column(name = "horesta")
private Integer horesta;

Class TabCurs

@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "academico.seq_tabcurs")
@SequenceGenerator(allocationSize = 1, name = "academico.seq_tabcurs", sequenceName = "academico.seq_tabcurs")
@Column(name = "codcurs")
private Integer codcurs;
@Column(name = "aplcurs")
private String aplcurs; // apelido 
@Column(name = "procurs")
private Integer procurs;
@Column(name = "aticurs")
private Integer aticurs;
@Column(name = "quamese")
private Integer quamese;

The mistake

java.lang.NullPointerException
at org.hibernate.cfg.annotations.CollectionBinder.bindCollectionSecondPass(CollectionBinder.java:1456)
at org.hibernate.cfg.annotations.CollectionBinder.bindOneToManySecondPass(CollectionBinder.java:864)
at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:779)
at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:728)
at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:70)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1695)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1424)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
at br.inf.topsoft.data.controller.HibernateUtil.conecta(HibernateUtil.java:471)
at br.inf.topsoft.toploginfx.controller.LoginController$1.call(LoginController.java:309)
at br.inf.topsoft.toploginfx.controller.LoginController$1.call(LoginController.java:295)
at javafx.concurrent.Task$TaskCallable.call(Task.java:1423)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at javafx.concurrent.Service.lambda$null$491(Service.java:725)
at java.security.AccessController.doPrivileged(Native Method)
at javafx.concurrent.Service.lambda$executeTask$492(Service.java:724)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at br.inf.topsoft.toploginfx.controller.LoginController$2.failed(LoginController.java:408)
at javafx.concurrent.Service.lambda$new$489(Service.java:539)
at com.sun.javafx.binding.ExpressionHelper$SingleChange.fireValueChangedEvent(ExpressionHelper.java:182)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.access$000(ObjectPropertyBase.java:51)
at javafx.beans.property.ObjectPropertyBase$Listener.invalidated(ObjectPropertyBase.java:233)
at com.sun.javafx.binding.ExpressionHelper$SingleInvalidation.fireValueChangedEvent(ExpressionHelper.java:137)
at com.sun.javafx.binding.ExpressionHelper.fireValueChangedEvent(ExpressionHelper.java:81)
at javafx.beans.property.ObjectPropertyBase.fireValueChangedEvent(ObjectPropertyBase.java:105)
at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:112)
at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
at javafx.concurrent.Task.setState(Task.java:696)
at javafx.concurrent.Task$TaskCallable.lambda$call$500(Task.java:1453)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
at java.lang.Thread.run(Thread.java:748)

Try do debug it and see why you get that null. It’s not clear from the mappings what may be wrong.

Ok, thank you, good idea

Thank you

It appeared that the problem is in the session, however this is so difficult when you do this mapping, I tried to use mappedBy, but the list was coming empty

 public static Session getSession() {

    Session session = sessionFactory.openSession();


    session.beginTransaction();
    return session;

}

    java.lang.NullPointerException
at br.inf.topsoft.data.controller.HibernateUtil.getSession(HibernateUtil.java:548)
at br.inf.topsoft.data.dao.TabUsuaDao.getUnico(TabUsuaDao.java:210)
at br.inf.topsoft.toploginfx.controller.LoginController$1.call(LoginController.java:312)
at br.inf.topsoft.toploginfx.controller.LoginController$1.call(LoginController.java:295)

The HibernateUtil is not a Hibernate class, so it is a bug in your application.

You are better off a container like Spring or JavaEE to manage the Hibernate Session.