我刚开始在企业应用程序中使用 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 的另一个实例包含过时信息的风险。对此的最佳实践是什么?
最佳答案
我不确定你的设计问题到底是什么,因为无状态 bean 不应该保留...状态。您应该按需检索用户组,更新它,然后保留回数据库。如果您确实担心并发更新并需要更严格的控制,请尝试在实体上使用锁定模式:
- JPA 1.0 支持通过版本号进行乐观锁定
(
OPTIMISTIC
、OPTIMISTIC_FORCE_INCRMENT
)。 - JPA 2.0 添加了悲观锁定(
INCRMENT
,PESSIMITIC_FORCE_INCRMENT
)
仅当系统中对相同实体存在大量争用时才使用悲观锁定,因为它的扩展性不佳。
关于java - JPA2.0 和 EE6 使我的实体保持同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10172455/