openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Dick <michael.d.d...@gmail.com>
Subject Re: Problem with merge
Date Thu, 19 Feb 2009 17:22:52 GMT
Hi Gerlex,

This has to do with the way OpenJPA determines whether a field was set to
null or whether it was never loaded from the database. The default
configuration assumes that a null value was never loaded, unless there's a
DetachedStateManager (OpenJPA object that tracks the state of your entity)
present in the entity that you're merging.

There are a couple of ways to resolve this issue. One is to ensure that a
detached state manager is present in the entity when you merge it. This
should be the case unless you've serialized the entity, or if you're trying
to merge in a new copy of the entity class.

Another option is to change the assumptions that OpenJPA makes. This can be
done by setting the openjpa.DetachState configuration option to
"fetch-groups" or "all". These settings may have other effects on the
application (ie setting it to all means that when the object is detached -
em.clear() you'll load all the fields from the database, fetch-groups loads
the current fetch-group).

I can't say which option is best for you without understanding your
application, you might want to consult the OpenJPA manual to see what it has
to say. Good places to start :
http://openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_detach_graph
http://openjpa.apache.org/builds/latest/docs/manual/manual.html#detached-state-field

Hope this helps

-mike



On Thu, Feb 19, 2009 at 10:35 AM, Gerlex <gerlma@de.ibm.com> wrote:

>
> I load the objects with my own adopted query.
>
>
> public List<Auftrag> getAuftragsliste(Auftragsfilter auftragsfilter) throws
> HermesRuntimeException{
>                List<Auftrag> listeauftraege=new LinkedList<Auftrag>();
>
>              // ..... build my query
>
>
>
> try{
>                        Query query =em.createQuery(abfrage.toString());
>                // fill my placeholder
>                        for (Map.Entry<String, Object> s :
> filtermap.entrySet()) {
>                                query.setParameter(s.getKey(),
> s.getValue());
>                                System.out.println(s.getKey() + " " +
> s.getValue());
>                        }
>                        for(Map.Entry<String, Date> s :
> filterdatum.entrySet() ){
>                                query.setParameter(s.getKey(), s.getValue(),
> TemporalType.DATE);
>                        }
>
>                        List resultList = query.getResultList();
>                        listeauftraege.addAll(resultList);
>                }
>                catch(IllegalArgumentException e){
>                        e.printStackTrace();
>                        throw new
> HermesRuntimeException("AuftragsverwaltungBean/getAuftragslliste:
> Auragsliste konnte nicht geladen werden, da Query ung├╝ltig");
>                }
>
>
>                return listeauftraege;
>                   }
>
>
>
> Yes, WAS61 with FixPack
>
>
> this is the code for my update:
> public void updateAuftrag(Auftrag auftrag) throws HermesRuntimeException {
>                // begin-user-code
>
>                try {
>                        Auftrag a=em.merge(auftrag);
>                        em.flush();
>                } catch (Exception e) {
>                        e.printStackTrace();
>                        throw new HermesRuntimeException(
>                         "AuftragsverwaltungBean/updateAuftrag: Auftrag
> konnte nicht aktualisiert werden");
>                }
>                // end-user-code
>        }
>
> the updates, where I change the value to an other value are
> successfull...,except the changes to null
>
>
> Rick Curtis wrote:
> >
> > How did you load an Object from the database? You are running WAS6, is
> > that WAS61 with the FP? A code snippet may help.
> >
> > If you use OpenJPA APIs to load data from your database, you shouldn't
> > need to call merge on that object. Is it possible that your transaction
> > isn't being committed and that is why your changes aren't being
> persisted?
> >
> > -Rick
> >
> >
> >
> > Gerlex wrote:
> >>
> >> Hello together,
> >>
> >> I have one big problem!!!
> >>
> >> I want to update an Persistent-Entity with the merge-method and it
> >> doesn't update the attributes,
> >> which I have set to null.
> >>
> >> For example:
> >>
> >> 1. I load one Object from the database
> >> 2. I set one attribute for example the date or a String to null
> >> 3. I merge this object
> >> 4. The database doesn't update the date
> >>
> >> When I load this object again, there is the same date than before.
> >>
> >> the attributes are nullable
> >>
> >>
> >> The Environment:
> >>
> >> Websphere 6
> >> Database DB2
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/Problem-with-merge-tp2353521p2353921.html
> Sent from the OpenJPA Developers mailing list archive at Nabble.com.
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message