NullPointerException on a query with an embedded table

Hello I am currently using vesion 5.3.15 java 8, and I am doing a test ride to migrate to vesion 5.4.11, and java 11

I have a NullPointerException error on a query with an embedded table structure like here

Tab1
...

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumnsOrFormulas({
			@JoinColumnOrFormula(column = @JoinColumn(name="ida", referencedColumnName="ida")),
			@JoinColumnOrFormula(column = @JoinColumn(name="idb", referencedColumnName="idb")),
		@JoinColumnOrFormula(formula=@JoinFormula(value="'A'", referencedColumnName="pref"))
	})
	private Tab2 prop;

Tab2
...
	@EmbeddedId
	@AttributeOverride(name = "ida", column = @Column(name = "IDA", nullable = false, length = 2))
	@AttributeOverride(name = "idb", column = @Column(name = "IDB", nullable = false, length = 2))
        @AttributeOverride(name = "pref", column = @Column(name = "PREF", nullable = false, length = 2))
	private Tab2Id id;

Tab2Id
...
@Embeddable
@Data
public class Tab2Id implements java.io.Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 7939307649952007941L;

	@Column(name = "IDA", nullable = false, length = 2)
	@ColumnTransformer(write="upper(?)")
	private String ida;
	
	@Column(name = "IDB", nullable = false, length = 2)
	@ColumnTransformer(write="upper(?)")
	private String idb;


	@Column(name = "PREF", nullable = false, length = 2)
	@ColumnTransformer(write="upper(?)")
	private String pref;
}

Is there something wrongly coded, thanks in advance for your help

works in 5.3.15 and not works in 5.4.11

  CriteriaBuilder builder = session.getCriteriaBuilder();
  CriteriaQuery<Tab1> query = builder.createQuery(Tab1.class);
  Root<Tab1> root = query.from(Tab1.class);
  query.where(builder.equal(root.get(Tab1_.PROP).get(Tab2_.ID).get(Tab2Id_.IDA),"XX"));
  List<Tab1> list = session.createQuery(query).getResultList();

works in 5.3.15 and 5.4.11

  CriteriaBuilder builder = session.getCriteriaBuilder();
  CriteriaQuery<Tab2> query = builder.createQuery(Tab2.class);
  Root<Tab2> root = query.from(Tab2.class);
  query.where(builder.equal(root.get(Tab2_.ID).get(Tab2Id_.IDA),"XX"));
  List<Tab2> list = session.createQuery(query).getResultList();

Message :

java.lang.NullPointerException
at org.hibernate.persister.entity.AbstractPropertyMapping.toColumns (AbstractPropertyMapping.java:95)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns (BasicEntityPropertyMapping.java:43)
at org.hibernate.persister.entity.AbstractEntityPersister.toColumns (AbstractEntityPersister.java:2014)

1 Like

Man, you rock!
Lost all my day with this annoying NullPointerException without knowing if It was my complex mapping (same as yours) or some kind of bug in Hibernate. Downgrading version to 5.3.15 and it worked again. This is probably an uncovered test case.
As you did, I mixed @JoinColumnsOrFormulas with a @JoinColumn and a @JoinFormula.