diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/PropertyBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/PropertyBinder.java index 9cd76b70c9bf..8889cd07a321 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/PropertyBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/PropertyBinder.java @@ -781,6 +781,12 @@ private static void buildProperty( propertyBinder.setInheritanceStatePerClass( inheritanceStatePerClass ); propertyBinder.setId( !entityBinder.isIgnoreIdAnnotations() && hasIdAnnotation( property ) ); + if ( isPropertyOfRegularEmbeddable( propertyHolder, isComponentEmbedded ) + && property.hasDirectAnnotationUsage(Id.class)) { + throw new AnnotationException("Member '" + property.getName() + + "' of embeddable class " + propertyHolder.getClassName() + " is annotated '@Id'"); + } + final LazyGroup lazyGroupAnnotation = property.getDirectAnnotationUsage( LazyGroup.class ); if ( lazyGroupAnnotation != null ) { propertyBinder.setLazyGroup( lazyGroupAnnotation.value() ); @@ -805,6 +811,12 @@ private static void buildProperty( addNaturalIds( inSecondPass, property, columns, joinColumns, context ); } + private static boolean isPropertyOfRegularEmbeddable(PropertyHolder propertyHolder, boolean isComponentEmbedded) { + return propertyHolder.isComponent() // it's a field of some sort of composite value + && !propertyHolder.isInIdClass() // it's not a field of an id class + && !isComponentEmbedded; // it's not an entity field matching a field of the id class + } + private static AnnotatedColumns bindProperty( PropertyHolder propertyHolder, Nullability nullability, diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/id/entities/Location.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/id/entities/Location.java index 46490d0a2600..6d2058af3fa2 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/id/entities/Location.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/id/entities/Location.java @@ -8,7 +8,6 @@ /** * @author Emmanuel Bernard */ -@SuppressWarnings("serial") public class Location implements Serializable { public double longitude; public double latitude; diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/inheritance/InheritanceJunctionExistsPredicateTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/inheritance/InheritanceJunctionExistsPredicateTest.java index d88eec91cec0..cfb7b25972c2 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/inheritance/InheritanceJunctionExistsPredicateTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/inheritance/InheritanceJunctionExistsPredicateTest.java @@ -1,8 +1,6 @@ /* - * Hibernate, Relational Persistence for Idiomatic Java - * - * License: GNU Lesser General Public License (LGPL), version 2.1 or later - * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright Red Hat Inc. and Hibernate Authors */ package org.hibernate.orm.test.inheritance; diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/orphan/onetoone/embedded/OneToOneLazyOrphanRemovalInEmbeddedEntityTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/orphan/onetoone/embedded/OneToOneLazyOrphanRemovalInEmbeddedEntityTest.java index bb6433e194d9..e7ef506f1dbc 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/orphan/onetoone/embedded/OneToOneLazyOrphanRemovalInEmbeddedEntityTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/jpa/orphan/onetoone/embedded/OneToOneLazyOrphanRemovalInEmbeddedEntityTest.java @@ -113,7 +113,7 @@ public void setCar(Car car) { @Embeddable public static class Car { - @Id + @Column(insertable = false, updatable = false) private Integer id; // represents a unidirectional one-to-one diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/instantiation/MatchingConstructorTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/instantiation/MatchingConstructorTest.java index e83bfd67a14f..293a374e2fc6 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/instantiation/MatchingConstructorTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/query/hql/instantiation/MatchingConstructorTest.java @@ -1,3 +1,7 @@ +/* + * SPDX-License-Identifier: LGPL-2.1-or-later + * Copyright Red Hat Inc. and Hibernate Authors + */ package org.hibernate.orm.test.query.hql.instantiation; import org.hibernate.annotations.Imported;