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

Rob*_*Rob 0 java stateless java-ee-6 jpa-2.0

我很擅长在企业应用程序中使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个用户

@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;
    }

}
Run Code Online (Sandbox Code Playgroud)

现在,如果我有一个无状态bean将用户添加或删除到一个组,我冒着让无状态bean的另一个实例具有过时信息的风险.这是什么最好的做法?

Per*_*ion 5

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

  • JPA 1.0支持通过版本号(OPTIMISTIC,OPTIMISTIC_FORCE_INCREMENT)进行乐观锁定.
  • JPA 2.0增加了悲观锁定(INCREMENT, PESSIMISTIC_FORCE_INCREMENT)

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

补充阅读和实例