2012-08-28 143 views
0

我有两个映射的类与Hibernate:休眠不插入父

SETTLEMENT_MODEL_GROUP(父):

@Entity 
@Table(name = "MODEL_GROUP") 
public class SettlementModelGroup 
{ 

//omitted some not fields 

@OneToMany(fetch = FetchType.LAZY, mappedBy = "modelGroup") 
private List<SettlementModel> settlementModels; 

} 

SETTLEMENT_MODEL孩子的:

@Entity 
@Table(name = "MODEL") 
public class SettlementModel 
{ 

//omitted some not fields 

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name = "MODEL_GROUP_ID", insertable = false, updatable = false, nullable = false) 
private SettlementModelGroup modelGroup; 

} 

现在我做简单的数据库插入:

SettlementModel model = new SettlementModel(); 
    SettlementModelGroup settlementModelGroup = modelManager.getModelGroup(modelGroupId); 

    //setting other fields for model 
    model.setModelGroup(settlementModelGroup); 

    sessionFactory.getCurrentSession().save(model); 

给我:

SQL Error: 1400, SQLState: 23000 
ORA-01400: cannot insetr NULL into ("MYSCHEMA"."MODEL"."MODEL_GROUP_ID") 

为什么冬眠不插入父ID,但它的存在,并创建?即使给它在标准输出返回正确的ID ...

而且我无法从SettlementModel删除insertable = false, updatable = false因为它给了我的部署

+0

我认为实际问题我为什么你不能删除'insertable = false,updatable = false'。你会得到什么错误? – axtavt

+0

我猜是因为我没有在'@ OneToMany'注释中添加'cascade = CascadeType.ALL' – kamil

回答

2

冬眠错误增加到@OneToManycascade = CascadeType.ALL
从母体取出nullable = false

+0

是的。然后我删除了可插入的,可更新= false,它的工作,谢谢! – kamil

1

尝试使用cascade = CascadeType.ALL进入hbm文件,其中您定义了oneToMany关系

+0

是的,就是这样。然后我删除了'insertable,updateable = false',它工作,谢谢! – kamil