> -----Original Message----- > From: KARR, DAVID (ATTCINW) > Sent: Tuesday, December 29, 2009 9:05 AM > To: [email protected] > Subject: XML overrides annotations, except when it doesn't > > Both the JPA spec and the OpenJPA doc implies that if I have > annotations > on a field and a definition for the field in my orm.xml file, the > annotations for that field will be ignored and only the XML definition > will be used. Is that correct? > > I believe I've found a situation where that isn't exactly true, and I'd > like to understand whether this is a bug or a misunderstanding.
I'd really like to get some clarification on this point. I've discovered a "feature" related to this that I like, and I'd like to know whether I can depend on it. As I said, the spec implies that the XML overriding is on a "field" basis, so that if you have anything specified for a field in the XML, it should override anything in the annotations for that field. OpenJPA appears to be using a more "fine-grained" approach, instead of what the spec says. For instance, if I have an enum type where the XML specifies the column name, but the annotations for the field do not, and the annotations specify the OpenJPA-specific "Strategy" annotation, this essentially "merges" the annotations with the XML, so that everything works. Similarly, if I have a OneToMany and I want to use the "OrderColumn" annotation (I'm not using the 2.0 implementation), I appear to be able to use the "OrderColumn" annotation even if I have the XML for the field specifying the column. I like this "fine-grained" approach, as it's really more logical and functional. However, if I'm understanding the spec, this isn't portable to another JPA implementation. I hope I'm wrong. > I prefer to define "logical" annotations and "physical" XML. This > effectively means that many annotations would be ignored, but I like > seeing the logical relationships defined in the entity class. > > I have numerous "OneToMany" annotations defined in my entities, with > the > corresponding physical XML. What I accidentally discovered is that I > had some entities where I had added "(fetch = FetchType.EAGER)" to the > annotation, but I never added the corresponding setting to the XML. I > found those relationships were being eagerly fetched. When I tried > removing the "fetch" setting in the annotation, the relationship became > lazily fetched. So, although the docs say that the overriding is at > the > "field" level, and not the "piece of a field" level, it appears that > the > settings in the annotation and the XML have been "merged" in some way. > > Is the "fetch" setting an exception to the rule as I understand it? > Are > there other exceptions to this? Is this a bug, according to the spec?
