hibernate在save(Object) 之后获取Object的Id.

Happy_Ending 发布于 2014/08/05 09:17
阅读 2K+
收藏 0

例子, order表有1个主键 自增的orderId, 另外一个表orderDetail 有外键指向orderId,如果不做级联保存的话.

是不是可以先save(order)之后获取ID,然后在保存orderdetail表?


加载中
0
小99
小99
你的id主键策略怎么写的
0
小99
Happy_Ending
Happy_Ending
我的orderDao继承hibernateDao.save(order)之后order的orderId还是null,感觉原因是事物没有提交, 之后我在另外的一个方法中使用注解管理事物,调用之后仍然为null.
0
小99
小99
如果想再深入了解的话,你可以百度 对象的3种状态
0
Happy_Ending
Happy_Ending
@Id
//	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "QUOT_ID", nullable = false)
	public Long getQuotId() {
		return quotId;
	}

我注视掉了自增,如果有的话在保存时会报错,setting方法载入了不符合的值.

@小99


小99
小99
试试行不行
小99
小99
换成这个,你那个AUTO是由程序控制
小99
小99
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
0
4
426obnus
事物要是没提交  你拿到ID也有问题  万一回滚了  你拿到的ID很可能是另一个线程生成的
4
426obnus
回复 @Happy_Ending : 应该是的 但是只要事物提交了 对象是持久态 就会有ID
Happy_Ending
Happy_Ending
事物不提交是不能获取到ID的把?
0
小99
小99

这是我们项目的自增策略,用着正常

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "oper_id", unique = true, nullable = false)
public Integer getOperId() {
	return this.operId;
}

public void setOperId(Integer operId) {
	this.operId = operId;
}



0
Happy_Ending
Happy_Ending

@小99

刚刚和产品讨论,之前的表有双主键,之后修改表为单可orderID为逐渐,就没问题了.感觉不用级联保存代码量还是很大,准备修改为级联的.

小99
小99
我一直都是自己控制
Happy_Ending
Happy_Ending
回复 @小99 : 尝试的做做不行只能手动的一个一个save了.
小99
小99
级联你可要控制好啊,业务复杂之后hibernate级联不好控制啊!
返回顶部
顶部