Stack overflow error with Bidirectional mappings while migrating to 6.x

I’m currently in the process of migrating a Spring Boot application from Hibernate 5.x to Hibernate 6.x, and I’m getting a stack overflow error with bidirectional entity mappings that were previously working fine.

@Entity
public class Sponsor {
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid2")
    @Type(type = "pg-uuid")
    @Column(name = Properties.UUID, unique = true, nullable = false)
    protected UUID uuid;

  /**
     * If the sponsor is the official sponsor for an event, then this field will point
     * to the event. Otherwise, only the sponsor's relatedEvents will be set.
     */
    @OneToOne(mappedBy = Event.Properties.SPONSOR, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private Event officialEvent; 
    
     /**
     * This points to the related event. However, an event could have multiple sponsors all
     * claiming to represent the event. The official sponsor will have both the event field
     * as well as the relatedEvent field set.
     */
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "event_uuid")
    private Event relatedEvent;
    
    // other fields, getters, setters
}

@Entity
public class Event  {
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid2")
    @Type(type = "pg-uuid")
    @Column(name = Properties.UUID, unique = true, nullable = false)
    protected UUID uuid;

    /**
     * This points to the official sponsor. However, MULTIPLE sponsors can sometimes
     * claim to represent the event. The relatedSponsors field below links to all related
     * sponsors not just the official sponsor represented here.
     */
    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "sponsor_uuid")
    private Sponsor sponsor;

    /**
     * This points to ALL sponsor claiming a sponsorship with the event.
     */
    @OneToMany(mappedBy = "relatedEvent", targetEntity = Sponsor.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    private List<Sponsor> relatedSponsors = new ArrayList<Sponsor>();


Error:

java.lang.StackOverflowError: null
	at org.hibernate.sql.results.graph.entity.EntityResultGraphNode.getReferencedMappingContainer(EntityResultGraphNode.java:42)
	at org.hibernate.sql.results.graph.entity.internal.EntityFetchSelectImpl.lambda$createAssembler$0(EntityFetchSelectImpl.java:73)
	at org.hibernate.sql.results.internal.ResultsHelper$1.resolveInitializer(ResultsHelper.java:118)
	at org.hibernate.sql.results.graph.entity.internal.EntityFetchSelectImpl.createAssembler(EntityFetchSelectImpl.java:67)
	at org.hibernate.sql.results.graph.entity.AbstractEntityInitializer.<init>(AbstractEntityInitializer.java:176)
	at org.hibernate.sql.results.graph.entity.internal.EntityResultInitializer.<init>(EntityResultInitializer.java:35)
	at org.hibernate.sql.results.graph.entity.internal.EntityResultImpl.lambda$createResultAssembler$0(EntityResultImpl.java:91)
	at org.hibernate.sql.results.internal.ResultsHelper$1.resolveInitializer(ResultsHelper.java:118)
	at org.hibernate.sql.results.graph.entity.internal.EntityResultImpl.createResultAssembler(EntityResultImpl.java:82)
	at org.hibernate.sql.results.jdbc.internal.StandardJdbcValuesMapping.resolveAssemblers(StandardJdbcValuesMapping.java:53)
	at org.hibernate.sql.results.internal.ResultsHelper.createRowReader(ResultsHelper.java:77)
	at org.hibernate.sql.results.internal.ResultsHelper.createRowReader(ResultsHelper.java:62)
	at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.doExecuteQuery(JdbcSelectExecutorStandardImpl.java:188)
	at org.hibernate.sql.exec.internal.JdbcSelectExecutorStandardImpl.executeQuery(JdbcSelectExecutorStandardImpl.java:83)
	at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:76)
	at org.hibernate.sql.exec.spi.JdbcSelectExecutor.list(JdbcSelectExecutor.java:65)
	at org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:145)
	at org.hibernate.loader.ast.internal.SingleIdLoadPlan.load(SingleIdLoadPlan.java:117)
	at org.hibernate.loader.ast.internal.SingleIdEntityLoaderStandardImpl.load(SingleIdEntityLoaderStandardImpl.java:75)
	at org.hibernate.persister.entity.AbstractEntityPersister.doLoad(AbstractEntityPersister.java:3748)
	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3737)
	at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:604)
	at org.hibernate.event.internal.DefaultLoadEventListener.loadFromCacheOrDatasource(DefaultLoadEventListener.java:590)
	at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:560)
	at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:544)
	at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:207)
	at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:106)
	at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:68)
	at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:138)
	at org.hibernate.internal.SessionImpl.fireLoadNoChecks(SessionImpl.java:1222)
	at org.hibernate.internal.SessionImpl.immediateLoad(SessionImpl.java:1041)
....

Looks like you’re hitting a bug. Please try to create a reproducer with our test case template and if you are able to reproduce the issue, create a bug ticket in our issue tracker and attach that reproducer.