HHH-18626 fix error for @Id annotation in @Embeddable class

This commit is contained in:
Gavin King 2024-09-17 18:28:26 +02:00
parent e9bf523ce1
commit fc2b1b9854
3 changed files with 13 additions and 2 deletions

View File

@ -781,6 +781,12 @@ public class PropertyBinder {
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 @@ public class PropertyBinder {
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,

View File

@ -8,7 +8,6 @@ import java.io.Serializable;
/**
* @author Emmanuel Bernard
*/
@SuppressWarnings("serial")
public class Location implements Serializable {
public double longitude;
public double latitude;

View File

@ -113,7 +113,7 @@ public class OneToOneLazyOrphanRemovalInEmbeddedEntityTest {
@Embeddable
public static class Car {
@Id
@Column(insertable = false, updatable = false)
private Integer id;
// represents a unidirectional one-to-one