I'm creating this new issue from an error report added recently to HHH-12338, which nobody seemed to notice.
The fix applied for HHH-12338 causes a regression when {{@ElementCollection}} and {{@CollectionTable}} is used. The following mapping taken from an entity used to work until Hibernate 5.2.16. It causes a NPE for criteria queries starting from 5.2.17.
{code:java} @ElementCollection @CollectionTable( name = "doc_reader", joinColumns = @JoinColumn(name = "doc_id", nullable = false), foreignKey = @ForeignKey(CONSTRAINT) ) @Column(name = "reader", nullable = false) @Convert(converter = RoleConverter.class) private Set<Role> readers; // Role is an interface whose instances are represented in the database by names (strings), converted to/from by RoleConverter. {code}
Until 5.2.16, the JPA meta model class generated for this entity contains a SetAttribute for {{readers}}: {code:java} public static volatile SetAttribute<Doc, Role> readers; {code} Using 5.2.17, this becomes a SingularAttribute instead, which is obviously wrong (and it seems that @ElementCollection is not taken into account). {code:java} public static volatile SingularAttribute<Doc, Set<Role>> readers; {code} As a result, the following code then throws a NPE when creating a fetch join (last line). Debugging showed that {{Doc_.readers}} is null. {code:java} CriteriaQuery<Doc> q = b.createQuery(Doc.class); Root<Doc> docR = q.from(Doc.class); docR.fetch(Doc_.readers); {code} |
|