当我使用@Transactional注释时,多对一关系变为空

时间:2016-12-07 10:29:57

标签: java spring hibernate transactions

当我使用@Transactional时,在保存对象之后,hibernate get函数返回连接字段为空的对象。

这是我的业务层。 @Transactional注释就在那里。

@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;
}

这是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);
}

这个添加操作很有效,但getObj函数返回多对一关系字段为空的对象。

我的一个空字段是:

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

1 个答案:

答案 0 :(得分:0)

除非在保存封闭对象之前保存car对象,否则该字段肯定为null。 Hibernate将@ManyToOne映射的级联类型设置为none。

这意味着除非您指定特定的级联类型,否则不会对内部映射的对象执行对封闭对象执行的操作。

您可以执行以下操作来解决此问题:

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

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

查看不同的CascadeTypes,以便根据需要选择合适的enter image description here