Skip to content

hibernate/hibernate-models

Repository files navigation

Hibernate models

Provides support for dealing with an application’s managed resources[1] 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 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 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).


1. The application’s domain and related classes