Also, if you use Hibernate, you can use: *Session.createFilter*(city.getAddresses(), "where this.name like 'S%'").list();
On Tue, Apr 28, 2009 at 5:31 AM, Derek Chen-Becker <dchenbec...@gmail.com>wrote: > OK, for one, the bidirectional mapping adds no cost in terms of DB access > other than the time it takes you to write it. Collections are lazily loaded, > so unless your code *retrieves* City.addresses, the database never gets hit. > JPA is really not designed with the concept of entities having access to the > EntityManager that loaded them, although there may be some provider-specific > way to get at it. Unfortunately, you're on your own if you want an entity to > obtain other entities via queries or some other non-relationship means. > Generally, if you need that kind of coverage you should do it through logic > code that can glue things together instead of tying it to your entities. > After all, I'd argue that if the logic isn't part of what you can express in > the database then it doesn't belong in the entity classes anyways. When you > say "bogged down in bidirectional mappings" are you referring simply to the > overhead of adding the mappings to your entities, or do you think that > there's some performance issue with bidirectional mappings (AFAIK, there > aren't any). > > Derek > > > > On Mon, Apr 27, 2009 at 6:01 PM, TSP <tim.pig...@optrak.co.uk> wrote: > >> >> There are two questions here. I don't really want to get bogged down >> in bidrectional mappings I was rather hoping for suggestions on how my >> domain objects might simply get at the right Model transparently from >> both application and junit (in Grails it was done with Spring >> injection - here perhaps an EMF factory (a factory-factory?)) However, >> in answer to the bidirectional mapping question here is an example: >> >> class City { >> var name: String; >> var population: Int; >> // var addresses: java.util.Set[Address] // BAD because London has >> approx 3m addresses >> >> } >> >> class Address { >> name, street etc >> var city: City >> } >> >> object Address { >> def matchAddress( .. unstructured input strings from ERP >> system ...) = { >> ,,, >> Some[Address] >> else >> None >> } >> } >> >> >> class Organisation { >> var hq: Address; >> } >> >> So I can easily trace from organisation to it's address and then find >> out if the organisation is in a big city. >> But I never need to directly fetch the city and iterate through the >> addresses. >> >> There are many more examples where the many side of things runs into >> hundreds and thousands (shipments to a daily customer over the last 2 >> years, tracking events on trucks at 1 minute intervals stored for 6 >> months). >> >> Again with reference to Evans Domain Driven Design for a large and >> complex domain model (I expect to end up with well over 50 objects) >> universal bi-directional mappings are strongly discouraged (see for >> example discussion on p. 83) >> >> Now you might argue that my address matching should be delegated to a >> service, but the techniques can be quite country specific tying in the >> postcodes and town names for example or dealing with peculiarities >> (from my point of view) of US street naming conventions - so I want my >> address matching tied closely to may data objects (in that case it >> would be Address subclasses). Also as soon as I do get rid of bi- >> directional mappings then any direct business logic that requires >> traversal in the "missing" direction can be readily accomplished by >> access to the database. >> >> On Apr 27, 11:00 pm, Derek Chen-Becker <dchenbec...@gmail.com> wrote: >> > I may be misunderstanding this, but if you just do bidirectional >> mappings in >> > JPA then the DB query is generally efficient and transparent. Could you >> post >> > a little snippet showing what you're trying to do? >> > >> > Derek >> > >> > On Mon, Apr 27, 2009 at 2:44 PM, TSP <tim.pig...@optrak.co.uk> wrote: >> > >> > > Viktor, >> > > It's a valid point, and I would where possible but I've got quite a >> > > lot of uni-directional references (for example, addressable locations >> > > in a city) where using a mapping would entail very large fetches that >> > > are better handled by querying the database. Evans in Domain Driven >> > > Design is very keen on uni-directional references and who am I to >> > > argue :-) >> > > Tim >> > >> > > On Apr 27, 9:10 pm, Viktor Klang <viktor.kl...@gmail.com> wrote: >> > > > Why don't collection mappings work? >> > >> > > > Also, from personal experience, mixing persistence-logic in domain >> > > objects >> > > > does make you feel somewhat naughty. >> > >> > > > On Mon, Apr 27, 2009 at 9:15 PM, Tim P <tim.pig...@optrak.co.uk> >> wrote: >> > >> > > > > Hi >> > > > > I'm looking for some guidance here and I don't think this is >> addressed >> > > > > in the book. >> > >> > > > > I've got domain classes that need to go get stuff from the >> database >> > > > > "list all ... " type of methods. >> > > > > So presumably my domain class should have, or be allowed to have >> > > > > methods that access Model >> > > > > But my unit tests need to test these methods. So I need a model >> which >> > > > > is instantiated within the test environment and so does not need >> to be >> > > > > extended with RequestVarEM which presumably would be a bad thing >> > > > > (though perhaps it's harmless). >> > > > > Any suggestions on "best practice" to achieve this? (I'm still >> very >> > > > > much trying to find my way round natural scala constructs) >> > >> > > > > Should it be mentioned in the jpa chapter in the book? >> > >> > > > > Tim >> > >> > > > -- >> > > > Viktor Klang >> > > > Senior Systems Analyst >> >> > > > > -- Viktor Klang Senior Systems Analyst --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---