2016-12-07 3 views
0

Lorsque j'utilise @Transactional, après avoir enregistré des objets, la fonction hibernate get retourne l'objet dont les champs de jointure sont NULL.Lorsque j'utilise l'annotation @Transactional, les relations plusieurs-à-un sont nulles

Ceci est ma couche de gestion. L'annotation @Transactional est là.

@Override 
@Transactional(propagation = Propagation.REQUIRED) 
public KonKonfigCoverView addWithNewObj(KonKonfigCoverView objView, Long kurumId) 
     throws MosBaseException { 

    EnvanterKitTanimView kitView = null; 

    if (objView.getKit() != null){ 
     kitView = objView.getKit(); 
     if ("0001".equals(kitView.getEnvanterKitTip().getKod())){ //ATS 
      kitView = atsKitBO.addObj(kitView, kurumId); 
     } 
     else if("0002".equals(kitView.getEnvanterKitTip().getKod())){ //OGSHGS 
      kitView = ogsHgsBO.addObj(kitView, kurumId); 
     } 
     else if("0004".equals(kitView.getEnvanterKitTip().getKod())){ //TTS 
      kitView = akaryakitKitBO.addObj(kitView, kurumId); 
     } 
     objView.getKonKonfig().setKit(kitView); 
     objView.getKonKonfigDegisiklikDetay().setKit(kitView); 
     objView.setKit(kitView); 
    } 

    KonKonfigCoverView view = this.addObj(objView, kurumId); 

    if (objView.getKit() != null){ 
     view.setKit(kitView); 
    } 
    return view; 
} 

Ceci est la fonction this.addObj:

@Override 
public KonKonfigView addObj(KonKonfigView view, Long kurumId) throws MosBaseException{ 

    KonKonfig addedObj = konKonfigDAO.addObj(beforeAddObj, ilkTakilmaOdo, sonTakilmaOdo); 
    addedObj= konKonfigDAO.getObj(addedObj.getId()); 

    return (KonKonfigView) BaseHelper.gulmekYok(KonKonfig.class, KonKonfigView.class, addedObj, true, EnViewTip.FULL_DESCRIPTION, null); 
} 

Ce module opération fonctionne bien, mais la fonction retourne getObj objet que plusieurs à un champs de relation sont nuls.

Un de mes champs qui vient nulle est que:

@ManyToOne(optional=true) 
@JoinColumn(name="CAR_ID", insertable=false, updatable=false) 
private Car car; 

Répondre

0

À moins que vous enregistrez l'objet de la voiture avant d'enregistrer l'objet englobante, le champ sera certainement nul. Hibernate définit le type de cascade pour un mappage @ManyToOne sur aucun.

Cela signifie que les opérations effectuées sur l'objet englobant ne seront pas effectuées sur les objets mappés à l'intérieur sauf si vous spécifiez un type de cascade spécifique.

Vous pouvez faire ce qui suit pour résoudre ce problème:

Option 1: @ManyToOne(cascade = CascadeType.PERSIST) 

Option 2: 
@ManyToOne 
@Cascade(CascadeType.PERSIST) 

Commander les différents CascadeTypes afin que vous puissiez choisir le bon pour ce que vous avez besoin.

+0

Il n'a pas résolu le problème. Je pense que la raison est que je ne sauve pas l'objet de voiture. J'attribue juste un identifiant de voiture à l'objet enfermant à l'extrémité avant. J'ai deux champs pour l'objet de voiture. '@ManyToOne (optionnel = true) @JoinColumn (name =" CAR_ID ", insérable = false, updatable = false) Voiture privée; @Column (name = "CAR_ID") private Long carId; 'Lorsque j'enregistre mon objet englobant, je le sauvegarde avec le champ ** carId ** qui contient l'identifiant d'un des objets car puis je récupère mon objet englobant. Il apporte aussi l'objet ** car ** sauf si j'ai utilisé l'annotation @Transactional. Si j'ai utilisé @Transactional objet de voiture est nul. –