Alternative to deprecated <dynamic-component /> for entity plugin architecture in Hibernate

I’m seeking an alternative to the deprecated <dynamic-component /> for my plugin-based application architecture. My app can be deployed with different configurations/plugins that remain static during runtime. Let’s say, taht I have a base Person entity with a plugins map that should dynamically contain related entities like PersonAddress and PersonContactInfo.

I successfully implemented this using <dynamic-component /> in XML mapping, where I defined one-to-one relationships within the component. This works well for both loading and saving entities, but since <dynamic-component /> is deprecated, I need a modern alternative.

I’m considering using TypeBinder or AdditionalMappingContributor to manually extend the plugins property, but I’m concerned about the amount of manual work required, potential future deprecation (since I need to use the dynamic property for this to work), and added complexity when adding nested component mappings.

Has anyone implemented a similar plugin architecture with the annotation APIs that allows dynamic population of a map during entity loading and proper persistence during save operations? I need a solution that supports both one-to-one relationships and potentially nested components.

Any guidance would be appreciated.

Example code (where the application could be deployed with a module containing the Person class, and any combination of PersonAddress and PersonContactInfo):

public class Person {
    private Long id;
    private String firstName;
    private String lastName;
    private Map<String, Object> plugins; // Needs to be populated dynamically
    // ... getters, setters, constructors
}

@Entity
@Table(name = "person_address")
public class PersonAddress {
    @Id
    @Column(name = "person_id")
    private Long id;

    @OneToOne
    @MapsId
    @JoinColumn(name = "person_id")
    private Person person;

    // Address fields...
}

// Similar structure for PersonContactInfo, ...

Mapping, that is generated during the startup of the application:

<!-- Other mapping of the Person component  -->
<dynamic-component name="plugins">
    <one-to-one name="personAddress" class="org.example.PersonAddress" cascade="all" />
    <one-to-one name="personContactInfo" class="org.example.PersonContactInfo" cascade="all" />
</dynamic-component>

You could try to use a @ManyToAny mapping which also supports mapping to the whole domain: Hibernate ORM User Guide