当我使用@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;
答案 0 :(得分:0)
除非在保存封闭对象之前保存car对象,否则该字段肯定为null。 Hibernate将@ManyToOne
映射的级联类型设置为none。
这意味着除非您指定特定的级联类型,否则不会对内部映射的对象执行对封闭对象执行的操作。
您可以执行以下操作来解决此问题:
Option 1: @ManyToOne(cascade = CascadeType.PERSIST)
Option 2:
@ManyToOne
@Cascade(CascadeType.PERSIST)
查看不同的CascadeTypes,以便根据需要选择合适的。