以下のコードでは、メソッド 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();
}
}