小编rco*_*len的帖子

Spring数据CrudRepository和悲观锁

我正在使用

  • Spring Boot 1.4.2
  • Spring Data JPA 1.10.5
  • PostgreSQL 9.5数据库

我希望findOne在我的Spring Data存储库中有一个带有悲观锁的findOne方法,该方法与已经提供的方法分开.

根据这个答案,我写道:

public interface RegistrationRepository extends CrudRepository<Registration, Long> {
    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Query("select r from Registration r where r.id = ?1")
    Registration findOnePessimistic(Long id);
}
Run Code Online (Sandbox Code Playgroud)

这几乎可行.

不幸的是,这不会刷新实体管理器缓存中我的实体的先前实例.我有两个并发请求更新我的注册状态

  • 第二个等待第一个提交的事务
  • 第二个没有考虑第一个的变化.

因此破坏了行为.

任何线索为什么@Lock没有开箱即用刷新实体经理?

更新

这是请求的示例代码:

public interface RegistrationRepository extends CrudRepository<Registration, Long> {

    @Lock(LockModeType.PESSIMISTIC_WRITE)
    @Query("select r from registration_table r where r.id = ?1")
    Registration findOnePessimistic(Long id);

}

public void RegistrationService {

    @Transactional
    public void …
Run Code Online (Sandbox Code Playgroud)

java spring spring-data spring-data-jpa

24
推荐指数
1
解决办法
6348
查看次数

有没有办法调用纯虚拟类的"删除析构函数"?

我在Ubuntu Trusty上使用C++ 11和g ++ 4.8.

考虑一下这个片段

class Parent {
public:
    virtual ~Parent() =  default;
    virtual void f() = 0;
};

class Child: public Parent {
public:
    void f(){}
};
Run Code Online (Sandbox Code Playgroud)

叫做使用

{
    Child o;
    o.f();
}
{
    Parent * o  = new Child;
    delete o;
}
{
    Child * o  = new Child;
    delete o;
}
Run Code Online (Sandbox Code Playgroud)

我使用gcov生成我的代码覆盖率报告.它报告带有符号的析构函数_ZN6ParentD0Ev永远不会被调用,而它_ZN6ParentD2Ev是.

回答构造函数符号的双重发射GNU GCC(g ++):为什么它会生成多个dtors?报告_ZN6ParentD0Ev是删除构造函数.

有没有在Parent课堂上调用这个"删除析构函数"的情况?

附属问题:如果没有,有没有办法获得gcov/lcov代码覆盖工具(使用gcov与CMake/CDash一起使用详细指南的回答)在其报告中忽略该符号?

c++ destructor gcov lcov c++11

11
推荐指数
1
解决办法
1348
查看次数

JPA 更新查询:缓存未正确失效

为什么它不起作用:

@Test
public void test() {
    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("test-pu");
    EntityManager entityManager = entityManagerFactory.createEntityManager();
    String id = "id";
    long value = 1234L;

    entityManager.getTransaction().begin();

    FancyEntity fancyEntity = new FancyEntity(id);
    entityManager.persist(fancyEntity);
    int updateCount = entityManager.createQuery("update FancyEntity item set item.value = ?2 where item.id = ?1").setParameter(1, id).setParameter(2, value).executeUpdate();
    assertEquals(1, updateCount);

    FancyEntity checkResult = entityManager.find(FancyEntity.class, id);
    assertEquals(1234L, checkResult.getValue()); // <- this assert fails

    entityManager.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)

@Entity
public class FancyEntity {
    @Id
    private String id;
    @Column
    private long value;
    public FancyEntity(String id) {
        this.id …
Run Code Online (Sandbox Code Playgroud)

caching jpa eclipselink

2
推荐指数
1
解决办法
993
查看次数

SonarQube - 自定义规则,以防止调用某些静态方法

我将SonarQube用于Java项目.

我想在使用库中给定的静态方法时发生违规.

有没有办法在UI中执行此操作,或者我应该使用https://github.com/SonarSource/sonar-custom-rules-examples/中所述的自定义Java代码?

java sonarqube

2
推荐指数
1
解决办法
303
查看次数