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

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

我刚开始在企业应用程序中使用 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 支持通过版本号进行乐观锁定 (OPTIMISTICOPTIMISTIC_FORCE_INCRMENT)。
  • JPA 2.0 添加了悲观锁定(INCRMENTPESSIMITIC_FORCE_INCRMENT)

仅当系统中对相同实体存在大量争用时才使用悲观锁定,因为它的扩展性不佳。

Additional Reading and Examples

关于java - JPA2.0 和 EE6 使我的实体保持同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10172455/

相关文章:

java - 为什么Java中的子类是父类(super class)的实例但不能分配给它?

java - BeanValidation : Messages from ValidationMessages. 属性

authentication - 使用注释在 Servlet 3.0 中表单登录

java - 拆分字符串 - 笛卡尔方式

java - adb 找不到我的设备进行 Android 调试。为什么?

java - 如何在java中创建数字序列

java - 如何从 Activemq 异步拉取消息

sql - 为什么 JPA 生成的更新查询包含不必要的字段?

java - 对行的某种类型实现分页

java - 如何处理一个表的外键映射到多个表的主键?