Sample entities: {code :java } @Entity public class Address {
@Id @GeneratedValue private long id;
private String street;
@OneToOne(fetch = FetchType.LAZY, mappedBy = "address") private Customer customer;
}
@Entity public class Customer {
@Id @GeneratedValue private long id;
private String name;
@OneToOne(fetch = FetchType.LAZY) private Address address;
} {code} When defining a {{FetchProfile}} for entity {{Address}} and association {{customer}} (which has {{mappedBy}}), the {{VerifyFetchProfileReferenceSecondPass}} will fail with the following exception:
{color: red #ff0000 }org.hibernate.MappingException: property \ [customer] not found on entity \ [org.hibernate.test.annotations.fetchprofile.Address]{color}
The problem seems to be that {{OneToOne}} associations with {{mappedBy}} are added via {{OneToOneSecondPass}} but this second pass will be added +after+ the {{VerifyFetchProfileReferenceSecondPass}} because the {{FetchProfiles}} are added quite early in the {{AnnotationBinder.bindClass}} method. I think the {{FetchProfiles}} need to be added at the end of the {{bindClass}} and/or after the {{bindClass}} has finished.
Additionally when defining {{FetchProfiles}} via package-info in the (same?) package the same exception occurs. The problem here seems to be that package-info is processed before the entity hierarchy. I think the {{bindFetchProfiles}} for all packages should be called after all entity hierarchies have been initialised. |
|