HHH-11771 - @Id annotation ignored with @MappedSuperclass inheritance
This commit is contained in:
parent
f21c8c2927
commit
3c3b8f9375
|
@ -1510,6 +1510,18 @@ public final class AnnotationBinder {
|
||||||
// and if so, skip it..
|
// and if so, skip it..
|
||||||
for ( PropertyData propertyData : inFlightPropertyDataList ) {
|
for ( PropertyData propertyData : inFlightPropertyDataList ) {
|
||||||
if ( propertyData.getPropertyName().equals( property.getName() ) ) {
|
if ( propertyData.getPropertyName().equals( property.getName() ) ) {
|
||||||
|
Id incomingIdProperty = property.getAnnotation( Id.class );
|
||||||
|
Id existingIdProperty = propertyData.getProperty().getAnnotation( Id.class );
|
||||||
|
if ( incomingIdProperty != null && existingIdProperty == null ) {
|
||||||
|
throw new MappingException(
|
||||||
|
String.format(
|
||||||
|
"You cannot override the [%s] non-identifier property from the [%s] base class or @MappedSuperclass and make it an identifier in the [%s] subclass!",
|
||||||
|
propertyData.getProperty().getName(),
|
||||||
|
propertyData.getProperty().getDeclaringClass().getName(),
|
||||||
|
property.getDeclaringClass().getName()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
// EARLY EXIT!!!
|
// EARLY EXIT!!!
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
package org.hibernate.test.annotations.override.mappedsuperclass;
|
||||||
|
|
||||||
|
import javax.persistence.Access;
|
||||||
|
import javax.persistence.AccessType;
|
||||||
|
import javax.persistence.AttributeOverride;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.MappedSuperclass;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Stanislav Gubanov
|
||||||
|
*/
|
||||||
|
@TestForIssue(jiraKey = "HHH-11771")
|
||||||
|
public class MappedSuperClassBasicPropertyIdAttributeOverrideTest extends BaseNonConfigCoreFunctionalTestCase {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class<?>[] {
|
||||||
|
BaseMappedSuperClass.class,
|
||||||
|
ExtendBase.class
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@MappedSuperclass
|
||||||
|
@Access(AccessType.FIELD)
|
||||||
|
public static class BaseMappedSuperClass {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
Long uid;
|
||||||
|
|
||||||
|
public Long getUid() {
|
||||||
|
return uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUid(Long uid) {
|
||||||
|
this.uid = uid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
public static class ExtendBase extends BaseMappedSuperClass {
|
||||||
|
|
||||||
|
@Access(AccessType.PROPERTY)
|
||||||
|
@Override
|
||||||
|
@AttributeOverride(name = "uid", column = @Column(name = "id_extend_table", insertable = false, updatable = false))
|
||||||
|
public Long getUid() {
|
||||||
|
return super.getUid();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
package org.hibernate.test.annotations.override.mappedsuperclass;
|
||||||
|
|
||||||
|
import org.hibernate.MappingException;
|
||||||
|
|
||||||
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Stanislav Gubanov
|
||||||
|
*/
|
||||||
|
@TestForIssue(jiraKey = "HHH-11771")
|
||||||
|
public class MappedSuperClassIdPropertyBasicAttributeOverrideTest extends BaseNonConfigCoreFunctionalTestCase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
return new Class<?>[] {
|
||||||
|
MappedSuperClassWithUuidAsBasic.class,
|
||||||
|
SubclassWithUuidAsId.class
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void buildResources() {
|
||||||
|
try {
|
||||||
|
super.buildResources();
|
||||||
|
fail( "Should throw exception!" );
|
||||||
|
}
|
||||||
|
catch (MappingException expected) {
|
||||||
|
assertEquals(
|
||||||
|
"You cannot override the [uid] non-identifier property from the [org.hibernate.test.annotations.override.mappedsuperclass.MappedSuperClassWithUuidAsBasic] base class or @MappedSuperclass and make it an identifier in the [org.hibernate.test.annotations.override.mappedsuperclass.SubclassWithUuidAsId] subclass!",
|
||||||
|
expected.getMessage()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package org.hibernate.test.annotations.override.mappedsuperclass;
|
||||||
|
|
||||||
|
import javax.persistence.Access;
|
||||||
|
import javax.persistence.AccessType;
|
||||||
|
import javax.persistence.MappedSuperclass;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Vlad Mihalcea
|
||||||
|
*/
|
||||||
|
@MappedSuperclass
|
||||||
|
@Access(AccessType.FIELD)
|
||||||
|
public class MappedSuperClassWithUuidAsBasic {
|
||||||
|
|
||||||
|
Long uid;
|
||||||
|
|
||||||
|
public Long getUid() {
|
||||||
|
return uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUid(Long uid) {
|
||||||
|
this.uid = uid;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package org.hibernate.test.annotations.override.mappedsuperclass;
|
||||||
|
|
||||||
|
import javax.persistence.Access;
|
||||||
|
import javax.persistence.AccessType;
|
||||||
|
import javax.persistence.AttributeOverride;
|
||||||
|
import javax.persistence.Column;
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Vlad Mihalcea
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@AttributeOverride(name = "uid", column = @Column(name = "id_extend_table", insertable = false, updatable = false))
|
||||||
|
public class SubclassWithUuidAsId extends MappedSuperClassWithUuidAsBasic {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@Access(AccessType.PROPERTY)
|
||||||
|
@Override
|
||||||
|
public Long getUid() {
|
||||||
|
return super.getUid();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue