diff --git a/checkerstubs/jakarta.persistence.astub b/checkerstubs/jakarta.persistence.astub index 55415ca015..ed7ee2d9ba 100644 --- a/checkerstubs/jakarta.persistence.astub +++ b/checkerstubs/jakarta.persistence.astub @@ -17,6 +17,9 @@ public interface EntityManager extends AutoCloseable { public interface EntityManagerFactory extends AutoCloseable { public @Nullable Cache getCache(); } +public interface EntityTransaction { + @Nullable Integer getTimeout(); +} public interface Parameter { public @Nullable String getName(); public @Nullable Integer getPosition(); diff --git a/hibernate-core/src/main/java/org/hibernate/Hibernate.java b/hibernate-core/src/main/java/org/hibernate/Hibernate.java index 4ff0bf19b0..3da9438a83 100644 --- a/hibernate-core/src/main/java/org/hibernate/Hibernate.java +++ b/hibernate-core/src/main/java/org/hibernate/Hibernate.java @@ -349,6 +349,31 @@ public final class Hibernate { return true; } + /** + * Initializes the property with the given name of the given entity instance. + *
+ * This operation is equivalent to {@link jakarta.persistence.PersistenceUnitUtil#load(Object, String)}.
+ *
+ * @param proxy The entity instance or proxy
+ * @param attributeName the name of a persistent attribute of the object
+ */
+ public static void initializeProperty(Object proxy, String attributeName) {
+ final Object entity;
+ final LazyInitializer lazyInitializer = extractLazyInitializer( proxy );
+ if ( lazyInitializer != null ) {
+ entity = lazyInitializer.getImplementation();
+ }
+ else {
+ entity = proxy;
+ }
+
+ if ( isPersistentAttributeInterceptable( entity ) ) {
+ PersistentAttributeInterceptor interceptor =
+ asPersistentAttributeInterceptable( entity ).$$_hibernate_getInterceptor();
+ interceptor.readObject( entity, attributeName, null );
+ }
+ }
+
/**
* If the given object is not a proxy, return it. But, if it is a proxy, ensure
* that the proxy is initialized, and return a direct reference to its proxied
diff --git a/hibernate-core/src/main/java/org/hibernate/Session.java b/hibernate-core/src/main/java/org/hibernate/Session.java
index 0a58dc0e16..c41597226b 100644
--- a/hibernate-core/src/main/java/org/hibernate/Session.java
+++ b/hibernate-core/src/main/java/org/hibernate/Session.java
@@ -23,6 +23,7 @@ import jakarta.persistence.EntityManager;
import jakarta.persistence.FlushModeType;
import jakarta.persistence.LockModeType;
import jakarta.persistence.PessimisticLockScope;
+import jakarta.persistence.TypedQueryReference;
import jakarta.persistence.criteria.CriteriaDelete;
import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.CriteriaUpdate;
@@ -1574,6 +1575,9 @@ public interface Session extends SharedSessionContract, EntityManager {
@Override
@@ -20,24 +22,24 @@ package org.hibernate.boot.jaxb.mapping.spi;
* @author Steve Ebersole
*/
public interface JaxbLifecycleCallbackContainer {
- JaxbPrePersistImpl getPrePersist();
- void setPrePersist(JaxbPrePersistImpl value);
+ @Nullable JaxbPrePersistImpl getPrePersist();
+ void setPrePersist(@Nullable JaxbPrePersistImpl value);
- JaxbPostPersistImpl getPostPersist();
- void setPostPersist(JaxbPostPersistImpl value);
+ @Nullable JaxbPostPersistImpl getPostPersist();
+ void setPostPersist(@Nullable JaxbPostPersistImpl value);
- JaxbPreRemoveImpl getPreRemove();
- void setPreRemove(JaxbPreRemoveImpl value);
+ @Nullable JaxbPreRemoveImpl getPreRemove();
+ void setPreRemove(@Nullable JaxbPreRemoveImpl value);
- JaxbPostRemoveImpl getPostRemove();
- void setPostRemove(JaxbPostRemoveImpl value);
+ @Nullable JaxbPostRemoveImpl getPostRemove();
+ void setPostRemove(@Nullable JaxbPostRemoveImpl value);
- JaxbPreUpdateImpl getPreUpdate();
- void setPreUpdate(JaxbPreUpdateImpl value);
+ @Nullable JaxbPreUpdateImpl getPreUpdate();
+ void setPreUpdate(@Nullable JaxbPreUpdateImpl value);
- JaxbPostUpdateImpl getPostUpdate();
- void setPostUpdate(JaxbPostUpdateImpl value);
+ @Nullable JaxbPostUpdateImpl getPostUpdate();
+ void setPostUpdate(@Nullable JaxbPostUpdateImpl value);
- JaxbPostLoadImpl getPostLoad();
- void setPostLoad(JaxbPostLoadImpl value);
+ @Nullable JaxbPostLoadImpl getPostLoad();
+ void setPostLoad(@Nullable JaxbPostLoadImpl value);
}
diff --git a/hibernate-core/src/main/java/org/hibernate/boot/jaxb/mapping/spi/JaxbManagedType.java b/hibernate-core/src/main/java/org/hibernate/boot/jaxb/mapping/spi/JaxbManagedType.java
index 7fb475082a..ab4e122277 100644
--- a/hibernate-core/src/main/java/org/hibernate/boot/jaxb/mapping/spi/JaxbManagedType.java
+++ b/hibernate-core/src/main/java/org/hibernate/boot/jaxb/mapping/spi/JaxbManagedType.java
@@ -7,6 +7,7 @@
package org.hibernate.boot.jaxb.mapping.spi;
import jakarta.persistence.AccessType;
+import org.checkerframework.checker.nullness.qual.Nullable;
/**
* Common interface for JAXB bindings representing entities, mapped-superclasses and embeddables (JPA collective
@@ -17,21 +18,21 @@ import jakarta.persistence.AccessType;
*/
public interface JaxbManagedType {
- String getDescription();
+ @Nullable String getDescription();
- void setDescription(String value);
+ void setDescription(@Nullable String value);
- String getClazz();
+ @Nullable String getClazz();
- void setClazz(String className);
+ void setClazz(@Nullable String className);
- Boolean isMetadataComplete();
+ @Nullable Boolean isMetadataComplete();
- void setMetadataComplete(Boolean isMetadataComplete);
+ void setMetadataComplete(@Nullable Boolean isMetadataComplete);
- AccessType getAccess();
+ @Nullable AccessType getAccess();
- void setAccess(AccessType value);
+ void setAccess(@Nullable AccessType value);
- JaxbAttributesContainer getAttributes();
+ @Nullable JaxbAttributesContainer getAttributes();
}
diff --git a/hibernate-core/src/main/java/org/hibernate/boot/jaxb/mapping/spi/db/JaxbColumnSizable.java b/hibernate-core/src/main/java/org/hibernate/boot/jaxb/mapping/spi/db/JaxbColumnSizable.java
index 1ea2af4b17..87bce1fbf6 100644
--- a/hibernate-core/src/main/java/org/hibernate/boot/jaxb/mapping/spi/db/JaxbColumnSizable.java
+++ b/hibernate-core/src/main/java/org/hibernate/boot/jaxb/mapping/spi/db/JaxbColumnSizable.java
@@ -19,4 +19,8 @@ public interface JaxbColumnSizable extends JaxbColumn {
default Integer getScale() {
return null;
}
+
+ default Integer getSecondPrecision() {
+ return null;
+ }
}
diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractPropertyHolder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractPropertyHolder.java
index 1bde0bb783..096ceffa3f 100644
--- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractPropertyHolder.java
+++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AbstractPropertyHolder.java
@@ -523,15 +523,18 @@ public abstract class AbstractPropertyHolder implements PropertyHolder {
String path,
MetadataBuildingContext context) {
int precision;
+ int secondPrecision;
final AnnotationUsage