当我集成Spring JPA数据和Spring缓存时,有一种奇怪的行为我无法解释。
我正在使用Spring Boot来设置我的演示项目。代码在下面。
我的配置bean:
@Configuration
public class AppConfig {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("Person");
}
}
我的实体豆。
@Entity
public class Person implements Serializable {
private static final long serialVersionUID = 2263555241909370718L;
@Id
@GeneratedValue
private Long id;
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public interface PersonRepository extends JpaRepository<Person, Long> {
@Override
@CacheEvict(value = "Person", allEntries = true)
public void delete(Long id);
@Cacheable("Person")
public Person findByName(String name);
@Override
@Query("select p from Person p where p.id = :id + 1L")
@Cacheable("Person")
public Person findOne(@Param("id") Long id);
}
我的单元测试类
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SpringDataDemoApplication.class)
public class SpringDataDemoApplicationTests {
@Autowired
private PersonRepository personRepository;
@Autowired
private CacheManager cacheManager;
@Before
public void setup() {
Person p1 = new Person();
p1.setName("Chris");
personRepository.save(p1);
}
@Test
public void test2() {
JpaRepository<Person, Long> jpaRepository = personRepository;
Person p = personRepository.findOne(0L);
Assert.assertNotNull(p);
p = personRepository.findOne(0L);
Assert.assertNotNull(p);
System.err.println("---------------------------------------");
p = jpaRepository.findOne(0L);
Assert.assertNotNull(p);
p = jpaRepository.findOne(0L);
Assert.assertNotNull(p);
}
}
输出很奇怪。
Hibernate: insert into person (id, name) values (default, ?)
Hibernate: select person0_.id as id1_0_, person0_.name as name2_0_ from person person0_ where person0_.id=?+1
---------------------------------------
Hibernate: select person0_.id as id1_0_, person0_.name as name2_0_ from person person0_ where person0_.id=?+1
Hibernate: select person0_.id as id1_0_, person0_.name as name2_0_ from person person0_ where person0_.id=?+1
它应该只为我的期望打印出一条sql语句。jparepository.findone(0L)
不使用缓存对象。
我还注意到@query注释工作得很好。JpaRepository和PersonRepository引用都使用定制的SQL。
我想Spring Cache和Spring JPA数据生成代理顾问的方式可能有些不同。这有可能是窃听器吗?
将@enablecaching
添加到您的配置:
@EnableCaching
@Configuration
public class AppConfig {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("Person");
}
}
声明缓存批注本身不会自动触发它们的操作,您应该使用enablecaching
批注以声明方式启用caching
行为。这种方法的优点之一是,您可以通过只删除一个配置行而不是代码中的所有注释来禁用它。
当标题[currSlotNo]的值为空时,该行将导致错误: } HomeVu1.VdslotService updVideoSlotData pictureInst:331 Picid[currSlotNo]:331 HomeVu1.VdslotService updVideoSlotData Picmk:331 HomeVu1.VdslotService updVideoSlotData aud
我调用下面的方法来计算一些值。我提供agencyID和月份的整数表示来执行计算。 等等...直到我到达12月(值12)。然而,当我到达5月(月值5)时,代码给出了一个运行时错误。然而,奇怪的是这个错误被抛出 在我的查询中,我没有在查询中的任何位置包含shift\u dayId,如下所示: 我恳请帮助我确定为什么givenMonth在值大于4时抛出运行时异常。 谢谢你 编辑 这是我要求的ShiftD
我正在处理NLP问题,正在使用PyTorch。由于某些原因,我的数据加载器返回了格式错误的批。我有由句子和整数标签组成的输入数据。这些句子可以是句子列表,也可以是标记列表。稍后我将在下游组件中将标记转换为整数。 我创建了以下自定义数据集: 当我以句子列表的形式提供输入时,数据加载器正确地返回成批完整的句子。请注意,: 批次正确地包含两句话和两个标签,因为。 然而,当我将句子作为标记列表的预标记列表
问题内容: 我正在实施一个非常简单的易感性感染恢复模型,该模型具有稳定的工作量,可以用于闲置的副项目- 通常是一项非常琐碎的任务。但是我遇到了使用PysCeS或SciPy的求解器错误,它们都使用lsoda作为其基础求解器。这仅在参数的特定值时发生,我为之困惑。我使用的代码如下: 这将产生以下错误: 通常,当我遇到这样的问题时,我设置的方程组最终有问题,但是我都看不到任何问题。奇怪的是,如果将mu更
我正在使用Mapstruct映射将一个POJO转换为另一个POJO模型 以下是mapstruct自动生成的方法 该方法基本上获取源POJO的映射,并将其转换为目标模型的映射。生成正在通过。 当我运行代码时,我在这个方法中得到了ClassCast异常:HeaderAttributeGenericDataTypeMaptoStringEnergiectAttributeDataMap 堆栈跟踪: 我还
我有以下代码来解析一个JSON文件: 要处理以下JSON文件: 如果我执行此代码,我将收到以下错误: 所以我开始一步一步地调试应用程序,看看part processing()中的哪个代码部分抛出了这个异常。令人惊讶的是,那里的所有代码都正常执行:没有抛出异常,也没有返回结果I except。 更让我惊讶的是,当我稍微改变第一种方法的代码时,它可以在不产生异常的情况下工作。 我不知道println方