Hibernate实体的二级缓存获取所有实体的重复属性值

时间:2016-09-24 08:42:50

标签: java hibernate jpa caching

我有一个完全不可变且很小的国家的经典实体,所以我决定用hibernate缓存实体,但如果我在查询所有实体时启用实体缓存,那么除了id重复之外我得到了其他属性(即具有不同ID但名称相同且所有其他字段的值相同的列表)。

@Immutable
@Entity @Table(name="countries")
@Cacheable @Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
public class Country {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Short id;

    @Column(nullable = false)
    protected String name;

    ....
}

hibernate配置如下:

hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQLSpatialDialect
hibernate.format_sql=true
hibernate.hbm2ddl.auto=update
hibernate.hbm2ddl.import_files=data-catalogs-create.sql,data-mysql-sample.sql
hibernate.hbm2ddl.import_files_sql_extractor=org.hibernate.tool.hbm2ddl.MultipleLinesSqlCommandExtractor
hibernate.implicit_naming_strategy=com.example.util.ImplicitNamingStrategy
hibernate.physical_naming_strategy=com.example.util.PhysicalNamingStrategyImpl
hibernate.show_sql=false
hibernate.cache.region.factory_class=org.hibernate.cache.redis.hibernate5.SingletonRedisRegionFactory
hibernate.cache.region_prefix=hibernate
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=true
hibernate.cache.use_structured_entries=true
hibernate.cache.provider_configuration_file_resource_path=hibernate-redis.properties
hibernate.generate_statistics=false
hibernate.search.default.directory_provider=filesystem
hibernate.search.default.indexBase=/var/lucene/indexes

equals / hashCode基于实体id,我对它进行了测试(番石榴测试),所以我放弃了与此相关的一些错误。

在我删除/评论@ Cacheable / @ Cache注释的那一刻,问题就消失了。

0 个答案:

没有答案