In https://hibernate.atlassian.net/browse/HHH-18891 wurde ein Bug bezüglich der @NotFound-Annotation eingemeldet.
Prinzipiell kann diese Notation mit einer @ManyToOne– oder @OneToOne-Annotation verwendet werden. Normalerweise hat man in so einem Fall einen Foreign-Key auf die Parent-Tabelle. Wenn dieser jedoch fehlt, können in der Column der Child-Entity aber auch IDs gespeichert werden, die in der Parent-Tabelle eventuell gar nicht exisitieren. Nachdem bei einer @ManyToOne– oder @OneToOne-Annotation die Parent-Entity (eager) mitgeladen wird, wird per default eine Exception geworfen. Mit einer @NotFound(IGNORE)-Annotation kann die Exception aber auch verhindert werden.
@ManyToOne, @OneToOne und @NotFound-Annotation in der Hibernate-Doku:
https://docs.hibernate.org/orm/7.2/userguide/html_single/#associations-many-to-one
https://docs.hibernate.org/orm/7.2/userguide/html_single/#associations-one-to-many
https://docs.hibernate.org/orm/7.2/userguide/html_single/#associations-not-found
In einer speziellen Konstellation tritt bei der Annotation allerdings ein Assertion-Error auf:
java.lang.AssertionError
at org.hibernate.sql.results.graph.Initializer.getResolvedInstance(Initializer.java:67)
at org.hibernate.sql.results.graph.embeddable.internal.EmbeddableAssembler.assemble(EmbeddableAssembler.java:40)
Den Testcase zum Reproduzieren des Bugs findet man hier:
https://github.com/peter1123581321/hibernate-test-case-templates/blob/HHH-18891/orm/hibernate-orm-6/src/test/java/org/hibernate/bugs/HHH18891Test.java
Konkret tritt der Fehler aber in Kombination mit einer @JoinFormula-Annotation auf:
@Entity(name = "DocumentIgnore")
public static class DocumentIgnore {
@Id
@GeneratedValue
Long id;
@ManyToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumnOrFormula(column = @JoinColumn(name = "owner", referencedColumnName = "id", insertable = false,
updatable = false))
@JoinColumnOrFormula(formula = @JoinFormula(value = "'fubar'", referencedColumnName = "name"))
Person owner;
}
Link zur @JoinFormula-Annotation:
https://docs.hibernate.org/orm/7.2/userguide/html_single/#associations-JoinFormula
Der entsprechende Bugfix war im EmbeddableAssembler dann relativ schnell umgesetzt.
Link zum Pull-Request:
https://github.com/hibernate/hibernate-orm/pull/10208
