From 4fac597229f3acafcc4cf504af742f9a3f120eae Mon Sep 17 00:00:00 2001 From: Christian Beikov Date: Mon, 13 Jan 2025 15:27:40 +0100 Subject: [PATCH] HHH-7135 Disallow @MapsId on unowned @OneToOne --- .../org/hibernate/boot/model/internal/ColumnsBuilder.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ColumnsBuilder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ColumnsBuilder.java index 1cb4a6e9ca75..7c87992f6077 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ColumnsBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/ColumnsBuilder.java @@ -289,6 +289,11 @@ private JoinColumn[] getJoinColumnAnnotations(MemberDetails property, PropertyDa */ AnnotatedColumns overrideColumnFromMapperOrMapsIdProperty(PropertyData override) { if ( override != null ) { + final OneToOne oneToOneAnn = override.getAttributeMember().getDirectAnnotationUsage( OneToOne.class ); + if ( oneToOneAnn != null && nullIfEmpty( oneToOneAnn.mappedBy() ) != null ) { + throw new AnnotationException( "Property '" + getPath( propertyHolder, override ) + + "' is annotated '@MapsId' but has no columns due to its '@OneToOne(mappedBy)' usage" ); + } final AnnotatedJoinColumns joinColumns = buildExplicitJoinColumns( override.getAttributeMember(), override ); return joinColumns == null ? buildDefaultJoinColumnsForToOne( override.getAttributeMember(), override )