What about other possible transaction that can occur between checking and saving your entity. This transaction can possible make your entity duplicate.
On 18 дек, 23:54, epitka <[email protected]> wrote: > Just to continue on this, since it is indirectly related. > > If I have parent<--> child relationship, and this constraint is also > valid for child,(namely that parent has only one child with same > name), then wouldn't it be better to put this check in parent when > adding child to see if there is a child with a same name, since > collection will be initialized with all children anyway so instead of > going to db I can just do in memory check. Am I reasoning correctly > here? > > On Dec 18, 12:13 pm, "Fabio Maulo" <[email protected]> wrote: > > > > > In the mapping > > <query name="MyEntity.Exists"> > > select e.id from MyEntity e where e.Prop1 = :pp1 and e.Prop2 = :pp2 > > </query> > > > In MyEntityDao > > public bool Exists(MyEntity example) > > { > > return Session.GetNamedQuery("MyEntity.Exists") > > .SetParameter("pp1",example.Prop1) > > .SetParameter("pp2",example.Prop2) > > .UniqueResult() != null; > > > } > > > More then one-code-line the query in the mapping is parsed/compiled/prepared > > during BuildSessionFactory, in the Exists method execution NH only get the > > prepared command, set parameters and execute the query. > > The other advantage is that the "NaturalId" is in the mapping with all > > others "persistence matters". > > > But... each one have his way... I did myyyyy waaaay > > > 2008/12/18 epitka <[email protected]> > > > > This seems to work. Is there better way (don't worry about reflection) > > > > public bool EntityExists(PersistentObject exampleInstance, params > > > string[] propertiesToInclude) > > > { > > > List<string> includedProperties = new List<string> > > > (propertiesToInclude); > > > > Type exampleType = exampleInstance.GetType(); > > > ICriteria criteria = NHSession.CreateCriteria > > > (exampleType); > > > Example example = Example.Create(exampleInstance); > > > > PropertyInfo[] properties = exampleType.GetProperties(); > > > > foreach (PropertyInfo pi in properties) > > > { > > > if (includedProperties.Contains(pi.Name) == false) > > > { > > > example.ExcludeProperty(pi.Name); > > > } > > > } > > > > criteria.Add(example); > > > return criteria.SetProjection(Projections.Id()).List > > > ().Count>0; > > > } > > > > On Dec 18, 11:08 am, "Fabio Maulo" <[email protected]> wrote: > > > > 2008/12/18 epitka <[email protected]> > > > > > > What is am after is just a simple way to confim that it either exists > > > > > or not without hydrating entities. So select e.id would do it? > > > > > "select e.id ..." return an instance of the id (in your case a string) > > > if > > > > present. > > > > > > Example api does not provide IncludeProperties just ExcludeProperties. > > > > > Is there a reason other then time? > > > > > > On Dec 18, 10:41 am, "Fabio Maulo" <[email protected]> wrote: > > > > > > I prefer use DAO/Repository that is the only tier knowing something > > > about > > > > > > persistence.Where I need a specific Exists method based on a > > > NaturalId > > > > > I'm > > > > > > not using Count but only > > > > > > select e.id from .... where ..... > > > > > > > 2008/12/18 epitka <[email protected]> > > > > > > > > Thanks Fabio, > > > > > > > I look into named query, I think I found another thread that talks > > > > > > > about this. I put this in the "service" rather then "repository". > > > My > > > > > > > repositories only fetch and persist. Anything else like get the > > > total > > > > > > > of something, check this or that go into service classes. Does > > > > > > > this > > > > > > > make sense? > > > > > > > > On Dec 18, 10:08 am, "Fabio Maulo" <[email protected]> wrote: > > > > > > > > - Create a method in your DAO/Repository named Exists(YourEntity > > > > > example) > > > > > > > - > > > > > > > > In the mapping write a namedQuery named "YourEntity.Exists" > > > > > > > > - the query may look like : select count(*) from YourEntity e > > > where > > > > > > > > e.NaturalIdProperty1 = :pp1 and e.NaturalIdProperty2 = :pp2 > > > > > > > > - Implements the Exists method using the named query > > > > > > > > > If you don't want use HQL you can use Criteria but, in this case > > > > > where > > > > > > > you > > > > > > > > have a static query, HQL is better candidate. > > > > > > > > > 2008/12/18 epitka <[email protected]> > > > > > > > > > > Hi, > > > > > > > > > I use surrogate keys on my tables, but some tables have > > > > > > > > > columns > > > > > that > > > > > > > > > are unique. For example one cannot create a project that has > > > the > > > > > same > > > > > > > > > name. So I am wondering what is the best way to query using NH > > > to > > > > > > > > > check if name already exists in the table, so I can make a > > > check > > > > > > > > > rather then catching exception. I do not want to populate the > > > > > entity > > > > > > > > > with that name just return count. Can anybody give example. > > > > > > > > > -- > > > > > > > > Fabio Maulo > > > > > > > -- > > > > > > Fabio Maulo > > > > > -- > > > > Fabio Maulo > > > -- > > Fabio Maulo- Скрыть цитируемый текст - > > - Показать цитируемый текст - --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---
