嗨,
我有一个hibernate实体,它有一组另一个实体作为其字段.像这样的东西:
public class UserEntity implements Srializable {
private Set<Role> roles;
}
Run Code Online (Sandbox Code Playgroud)
我应该以一种方式保留表,即系统中始终存在至少一个ADMIN用户.这可以通过简单的方式完成,如下所示:
public void updateUser{
UserEntity ue = getUser();
if (userIsNotTheLastAdmin(ue)) {
/** Here is a race condition **/
roles.remove(Role.ADMIN);
getSession().saveOrUpdate(ue);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我们进行并发操作时会发生真正的问题.如何以原子方式执行所有操作?
谢谢,
HM
是否有多次在一个会话上调用beginTransaction的风险?我的意思是例如:
session.beginTransaction();
session.saveOrUpdate(object1);
// .... some works
session.beginTransaction();
session.delete(object2);
// ... some other works
session.getTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
我这样做了,似乎没有问题(任何异常或警告).事实上,我想知道当我以这种方式使用事务时会发生什么.
我们使用Openfire 3.9.3.它的MySql数据库使用utf8_persian_ci排序规则,在openfire.xml中我们有:
...<defaultProvider>
<driver>com.mysql.jdbc.Driver</driver>
<serverURL>jdbc:mysql://localhost:3306/openfire?useUnicode=true&amp;characterEncoding=UTF-8</serverURL>
<mysql>
<useUnicode>true</useUnicode>
</mysql> ....
Run Code Online (Sandbox Code Playgroud)
问题是包含波斯字符(UTF-8编码)的离线消息被保存为问号字符串.例如,سلام(在波斯语中意为你好)被存储并显示为????.