:fn-managed: footnote:[The application's domain and related classes]
== Hibernate models
link:https://central.sonatype.com/search?namespace=org.hibernate.models&sort=name[image:https://img.shields.io/maven-central/v/org.hibernate.models/hibernate-models.svg?label=Maven%20Central&style=for-the-badge[Maven Central]]
link:https://github.com/jvm-repo-rebuild/reproducible-central/blob/master/content/org/hibernate/models/hibernate-models/README.md[image:https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/jvm-repo-rebuild/reproducible-central/master/content/org/hibernate/models/hibernate-models/badge.json&style=for-the-badge[Reproducible Builds]]
link:https://ge.hibernate.org/scans?search.rootProjectNames=hibernate-models-group[image:https://img.shields.io/badge/Revved%20up%20by-Develocity-06A0CE?style=for-the-badge&logo=gradle[Develocity]]
Provides support for dealing with an application's managed resources{fn-managed} as a de-typed abstraction model
backed by one or more sources. Consumers can then access details from that abstraction model in a unified way,
regardless of the underlying source.
NOTE: This work replaces the https://github.com/hibernate/hibernate-commons-annotations[`hibernate-commons-annotation`] library, which suffered from a number of shortcomings.
=== Annotations
The modeling of annotations in hibernate-models is defined by a few main actors:
AnnotationDescriptor:: Extended information about an annotation class
AnnotationTarget:: Something (Class, Method, ...) where an annotation can be used
AnnotationUsage:: Specific usage of an annotation on a target
AttributeDescriptor:: Details about an annotation attribute, including it's ValueTypeDescriptor
ValueTypeDescriptor:: Describes an allowable type for annotation attributes - ints, enums, etc. Provides the capability to manipulate these values (create them, wrap them, unwrap them, etc).
AnnotationDescriptorRegistry:: registry of AnnotationDescriptor references
=== Model
These mostly model Java constructs such as Class, Method, etc. but adds the capability
for these to be dynamic models (no physical Class).
ClassDetails:: Think java.lang.Class
TypeDetails:: Think java.lang.reflect.Type
MemberDetails:: Think java.lang.reflect.Member
FieldDetails:: Think java.lang.reflect.Field
MethodDetails:: Think java.lang.reflect.Method
RecordComponentDetails:: Think java.lang.reflect.RecordComponent
ClassDetailsRegistry:: registry of ClassDetails references
=== Artifacts
hibernate-models:: The base support, using Java reflection as the backing source.
hibernate-models-jandex:: Optional support for using https://smallrye.io/jandex/[Jandex] as the backing source. Using
definitions from a Jandex index has the benefit that the classes are not loaded into the ClassLoader which can be important
in a few scenarios (e.g. retain the ability to enhance a class's bytecode).