Spring Data JPA是否自动为查询方法创建缓存?

时间:2015-04-17 16:29:43

标签: spring jpa spring-data-jpa openjpa

我在Spring Data JPA存储库中创建了查询方法。我使用了方法命名约定。 我不确定,但看起来Spring Data为它做了查询缓存。我有那些实体:

public class Feature {

    private String desc;

    private FeatureFor featureFo;

}

public enum FeatureFor {

    ABC, DEF, XYZ;

}

在存储库中,我创建了名称为

的方法
public List<Feature> findByFeatureForIn(List<FeatureFor> featureFors);

此方法从不同的服务中调用两次。 第一次调用它时,我可以在控制台中看到生成的查询,如下所示:

SELECT ...... WHERE ((t0.featureFor = ? OR t0.featureFor = ?) AND t0.featureFor IS NOT NULL) [params=(String) ABC, (String) DEF]

这没关系。但是当通过第二个服务调用方法时,我可以看到使用相同参数生成的相同select。我确信在featureFors参数中有ABC和XYZ。但它完全被忽略了。我还尝试使用featureFors,其中包含一个ABC值(在第一个调用的服务中)。在这种情况下,生成的查询是这样的:

SELECT ...... WHERE (t0.featureFor = ? AND t0.featureFor IS NOT NULL) [params=(String) ABC, (String) DEF]

第二个服务传递了相同的参数(ABC和XYZ),但生成的查询和参数没有改变(它与第一个服务中生成的相同)。有人知道Spring Data是否为查询创建了缓存吗?我没有意识到我犯了一些错误。也许我做到了。我正在使用OpenJPA。谢谢你的帮助。

持久性配置如下所示:

<?xml version="1.0"?>
<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="openjpa">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <class>...difened entities here (including Feature)...</class>      
        <properties>
            <property name="openjpa.Log" value="DefaultLevel=INFO, Runtime=INFO, Tool=INFO, SQL=TRACE"/>
            <property name="openjpa.ConnectionFactoryProperties" value="PrintParameters=true" />
            <property name="openjpa.jdbc.MappingDefaults" value="ForeignKeyDeleteAction=restrict,JoinForeignKeyDeleteAction=restrict"/>
        </properties>
    </persistence-unit>
</persistence>

0 个答案:

没有答案