JPA2.0& EE6使我的实体保持同步

时间:2012-04-16 10:30:59

标签: java jpa-2.0 java-ee-6 stateless

我很擅长在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的另一个实例具有过时信息的风险。这是什么最好的做法?

1 个答案:

答案 0 :(得分:5)

我不确定你的设计问题是什么,因为无状态bean不应该保持...状态。您应该按需检索用户组,更新它,然后再保留回DB。如果您真的担心并发更新并需要更严格的控制,那么请尝试在您的实体上使用锁定模式:

  • JPA 1.0支持通过版本号进行乐观锁定 (OPTIMISTICOPTIMISTIC_FORCE_INCREMENT)。
  • JPA 2.0增加了悲观锁定(INCREMENTPESSIMISTIC_FORCE_INCREMENT

如果您的系统中存在大量针对相同实体的争用,则仅使用悲观锁定,因为它不能很好地扩展。

Additional Reading and Examples