0

以下のコードでは、メソッド EntityADAO.findByGroupId(...) を呼び出すと、トランザクションが完了するまでテーブル EntityA がロックされます。私はこれをしたくありません。テーブルのロックを回避するにはどうすればよいですか? 前もって感謝します。

My database is SQL SERVER 2012.  I am suing Hibernate 4.0.2.

以下はコードの抜粋です。

@Entity
@Table(name = EntityA)
    @NamedQueries ({
        @NamedQuery(name="EntityA.findByGroupId", query="SELECT p FROM EntityA p WHERE p.groupId= :groupId")})    
public class EntityA implements Serializable {
    @Id
    @Column(name = "EntityKey", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long entityKey;

    @Version
    @Column(name = "Version", nullable = false)
    private Long version = -1l;

    @NotNull
    @Column(name = "GroupId")
    private Integer groupId;
}

@Repository("EntityA")
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
public class EntityADAO  extends AbstractJpaDAO<EntityA> {

@PersistenceContext
protected EntityManager em;

    public EntityADAO() {
        setClazz(EntityADAO.class);
    }

    **//A call to this method locks the table EntityA until the transaction is complete**
    public List<EntityA> findByGroupId(int groupId) {               
        TypedQuery<EntityA> query = em.createNamedQuery("EntityA.findByGroupId", EntityA.class);
        query.setParameter("groupId", groupId);
        return query.getResultList();       
    }
}
4

1 に答える 1