我在Java中有一个用spring Transactional
注释包装的方法。
我内部有2个操作,一个是delete
,另一个是insert
。我的插入语句必须依赖于第一个操作(即delete
),但是由于第一个操作尚未提交,我的插入失败(唯一约束)。但有趣的是,通常在同一个事务中,我应该能够在同一个事务中读取/查看未经授权的操作(我的旧专有框架能够做到这一点),但这不适用于我的场景,第二个插入仍然失败,因为它看到数据尚未删除。
我尝试使用隔离READ_UNCOMMITTED
,但它不起作用。
我必须将这两个操作放在同一个事务中,因为任何一个失败都应该回滚这两个操作,我不能提交第一个操作然后继续第二个操作。
我怎样才能在Spring框架中做到这一点?
答案 0 :(得分:3)
通常在Hibernate中,在同一个事务中,while flushing(committing) it always follows a particular order.
Inserts
,然后在刷新时执行deletes
。
理想情况下,在您的情况下,deleting
insert
enitityManager.flush()
只需delete
后EntityManager.setFlushMode()
明确调用commit
。
另外,还可以查看auto
方法,您可以将模式类型设置为 View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);
final BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
// React to state change
Log.e("onStateChanged", "onStateChanged:" + newState);
if (newState == BottomSheetBehavior.STATE_EXPANDED) {
//do something
} else {
//do something
}
}
//Here is what you want
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) {
// React to dragging events
Log.e("onSlide", "the offset "+ slideOffset );
}
});
或function array_seaech($array, $company_id, $permission)
{
foreach($array as $key => $value)
{
if($value['company'] == $company_id)
{
foreach($value['permission'] as $keyp => $valuep)
{
if($valuep == $permission)
return true;
}
}
}
return false;
}