I have the following abstracts base classes:
@MappedSuperclass
public abstract class DomainEntityId implements Serializable {
private final Long value;
protected DomainEntityId() {
this.value = RandomGenerator.getDefault().nextLong();
}
public Long getValue() {
return value;
}
}
@MappedSuperclass
public abstract class DomainEntityModel<ID extends DomainEntityId> {
@EmbeddedId
@AttributeOverride(name = "value", column = @Column(name = "id"))
private final ID id;
protected DomainEntityModel(ID id) {
this.id = id;
}
@NonNull
public ID getId() {
return id;
}
}
and the following concrete entities:
@Embeddable
public class CustomerId extends DomainEntityId {}
When I try to find invoices by customer id, I get the following exception:
I’ve debug as I could and AFAICS, as both concrete entities share the same superclass, there is only one MappedSuperclass instance and the DeclaredIdentifierProperty is being replaced with the id of the last entity. After, this id is used to validate the query parameter value and they are incompatibles. There is a similar problem https://hibernate.atlassian.net/browse/HHH-11955, although I’m not sure that is exactly the same. In this repository https://github.com/franciscosousabr/mappedsuperclassissue I have an example of this issue. In branch master the error is occurring. In branch hibernate-5, the same code works well. |