I have a suspicion: I have defened all dependencies with jpa or hibernate annotation.
So I have also a lot of cicular dependencies, which sometimes make problem.
I will give you 2 examples. one which is OK when I use AbstractEntityModel
and on which makes problem, which is not set in the form through the Model but before.

1.

the hibernatemodel:

@IndexedEmbedded
@ManyToOne(cascade=CascadeType.MERGE,fetch = FetchType.LAZY)
@JoinColumn(name="NachAngNr",insertable=false, updatable=false)

public Angebot getAngebot(){
       return this.angebot;
    }

recursive part in Angebot:

@XmlTransient
@OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY)
@JoinColumn(name="NachAngNr",nullable=false )
public List<Nachweise> getNachweise() {
    return nachweise;
}

Angebot is set by DropDownChoice in the form

private IModel<List<? extends Angebot>> makeChoicesAngebote = new AbstractReadOnlyModel<List<? extends Angebot>>()
             {
                 @Override
                 public List<Angebot> getObject()
                 { List<Angebot> angebotelist=new ArrayList<Angebot>();
Iterator angeboteiterator=angebotManager.getAngebote().iterator();
                 while(angeboteiterator.hasNext()){
                     Angebot angebot=(Angebot)angeboteiterator.next();
if(angebot.getAngstatus().getId().longValue()==1)
                     angebotelist.add(angebot);
                 }
                     return angebotelist;
                 }

             };
IChoiceRenderer<Angebot> angebotchoicerenderer= new IChoiceRenderer<Angebot>() {

                   public Object getDisplayValue(Angebot angebot)
                     {
                         return angebot.getId();
                     }

                     public String getIdValue(Angebot angebot,int index)
                     {
                         return angebot.getId();
                     }
         };

final DropDownChoice<Angebot> angebote = new DropDownChoice<Angebot>("angebot",
 makeChoicesAngebote,angebotchoicerenderer);


The recursive part is treated in NachweiseManagerImpl :

public Nachweise saveNachweise(Nachweise nachweise) throws NachweiseExistsException {

      try {
          if(nachweise.getId()==null){
              System.err.println("xxxxxxxxxxxxxxxxxx Id=null");

              if(nachweise.getMitarbeiter()!=null) {
                }
======================= recursive Part for Kunde later =======================
   /*         if(nachweise.getKunde()!=null) {
                    System.err.println("xxxxxxxxxxxxxxxxxx Kunde");
(nachweise.getKunde()).addNachweis(nachweise);
                }*/
                if(nachweise.getXtyp()!=null) {
                }

                    if(nachweise.getAngebot()!=null) {
nachweise.getAngebot().addNachweis(nachweise);
                System.err.println("xxxxxxxxxxxxxxxxxx Angebot");
                    }
======================= recursive Part for Angebot =======================
                    if(nachweise.getAngebot1()!=null) {
nachweise.getAngebot1().addNachweis1(nachweise);
                    }

                    if(nachweise.getAngebot2()!=null) {
                    nachweise.getAngebot2().addNachweis2(nachweise);
                    }


                    if(nachweise.getObjekt()!=null) {
nachweise.getObjekt().addNachweise(nachweise);
                    }

                    if(nachweise.getPerson()!=null) {
nachweise.getPerson().addNachweis(nachweise);
                    }
          }
          return nachweiseDao.saveNachweise(nachweise);
      } catch (DataIntegrityViolationException e) {
          //e.printStackTrace();
          log.warn(e.getMessage());
throw new NachweiseExistsException("Nachweise '" + nachweise.getId() + "' already exists!");
      } catch (JpaSystemException e) { // needed for JPA
          //e.printStackTrace();
          log.warn(e.getMessage());
throw new NachweiseExistsException("Nachweise '" + nachweise.getId() + "' already exists!");
      }
  }

Angebot is set by the DropDownChoice Nachweise is first inserted and can be changed.

2.

the hibernateModel:

//@XmlTransient
@ManyToOne(cascade = CascadeType.MERGE,fetch=FetchType.LAZY)
@JoinColumn(name="NachKundNr",insertable=false, updatable=false)
    public Kunde getKunde(){
       return this.kunde;
    }

recursive Part for Kunde


@XmlTransient
@OneToMany(cascade={CascadeType.MERGE},fetch=FetchType.LAZY)
@JoinColumn(name="NachKundNr",insertable=false, updatable=false )
public List<Nachweise> getNachweise() {
    return nachweise;
}

Kunde ist set  is set after before adding the form :

 final NachweiseForm nachweiseform=new NachweiseForm("form",model);

if (!(pars.getPosition("nachweisnr")>=0&&pars.get("nachweisnr").toLong()>0)) {

    if (pars.getPosition("kundennr")>=0&&pars.get("kundennr").toLong()>0) {
Kunde kunde=kundeManager.get(new Long(pars.get("kundennr").toString()));
        System.err.println("====================== set Kunde reached");
        nachweiseform.getModelObject().setKunde(kunde);
======================= recursive Part for Kunde early set =======================
nachweiseform.getModelObject().getKunde().addNachweis(nachweiseform.getModelObject());
    }

    }

    after opening the form you see the Id of Kunde
after save it disappears.

    add(nachweiseform);

When I set the recursive part later same result

When I try to set the recursive part later I get

Am 04.05.2014 08:55, schrieb mscoon:
Usually this is not a problem. But maybe you are doing something different
that the "usual". I think you will need to show us your code to help you
any further.


On Sun, May 4, 2014 at 9:12 AM, Yahoo<[email protected]>  wrote:

It's the solution for all MANYTOONE-Fields defined in the Form
I have a MANYTOONE-Field which is preset and not set in the Form.
This field is not stored.

Am 02.05.2014 01:24, schrieb mscoon:

  No you don't. The referenced objects will be serialized along with the
entity you are serializing and everything should work just fine.




On Thu, May 1, 2014 at 10:30 PM, Yahoo<[email protected]>
wrote:

  Ok,thank  you, that's it.
My Entity has a lot of MANYTOONE relationships which are set
byDropDownChoices.
In the case of a new entity, do I have to load all these Entities too and
to save their ids ?


Am 01.05.2014 15:01, schrieb mscoon:

   Heiner,

You didn't tell us which dependency injection framework you  you using.

If you're using Spring then simply use the @SpringBean annotation to
get a
reference to an EntityManager or a Dao.

@SpringBean automatically works only for components so you'll also need
to
add a call to injector to your model's constructor.

public class MyModel implements IModel {

     @SpringBean
     EntityManager entityManager;

     public MyModel() {
       Injector.get().inject(this);
     }

...
}

This will take care of instantiating all @SpringBean annotated fields as
well are handle their serialization/deserialization.

Marios



On Thu, May 1, 2014 at 3:42 PM, Yahoo<[email protected]>
wrote:

   I tried the AbstractEntityModel <http://http://wicketinaction.

com/2008/09/building-a-smart-entitymodel/> from Igor Vaynberg but I
didn't get
solved the @Dependency annotation from Vaynbergs salve.
Is there another solution for the Hibernate integration for models.

Best regards
Heiner



  ---------------------------------------------------------------------
To unsubscribe, e-mail:[email protected]
For additional commands, e-mail:[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail:[email protected]
For additional commands, e-mail:[email protected]




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to