我很擅长在enteprise应用程序中使用ORM工具。我们正在构建一个使用JPA 2.0和EE6的可扩展应用程序。我正在尝试找到一个很好的模式来构建我的应用程序,但我找不到一种方法来保持我的实体同步(我想集合访问实体的bean)。
一个例子:
我有一个小组:
@Entity
public class Group implements Serializable
{
@Id
private Long id;
@OneToMany
private List<MyUser> myUsers;
public Group()
{
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
public void addUser(MyUser u)
{
myUsers.add(u);
}
}
我有一个用户
@Entity
public class MyUser implements Serializable
{
@Id
private Long id;
public MyUser()
{
}
public Long getId()
{
return id;
}
public void setId(Long id)
{
this.id = id;
}
}
现在,如果我有一个无状态bean可以向组添加或删除用户,我冒着让无状态bean的另一个实例具有过时信息的风险。这是什么最好的做法?
答案 0 :(得分:5)
我不确定你的设计问题是什么,因为无状态bean不应该保持...状态。您应该按需检索用户组,更新它,然后再保留回DB。如果您真的担心并发更新并需要更严格的控制,那么请尝试在您的实体上使用锁定模式:
OPTIMISTIC
,OPTIMISTIC_FORCE_INCREMENT
)。INCREMENT
,
PESSIMISTIC_FORCE_INCREMENT
)如果您的系统中存在大量针对相同实体的争用,则仅使用悲观锁定,因为它不能很好地扩展。