如何在运行时更改hibernate实体缓存配置

时间:2012-03-28 21:48:52

标签: hibernate ehcache

我正在使用基于注释的配置来为所有hibernate实体配置缓存策略,如下所示

@Entity
@Table(name = "EMP")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class EMPLOYEE extends AbstractEntity { 

我们有共同的项目来维护所有的hibernate实体clasess。我们将构建一个jar并在不同的应用程序中使用它。我们在两个应用程序中使用此实体jar。我必须为两个应用程序使用不同的缓存策略。 对于application1,我必须使用@Cache(usage = CacheConcurrencyStrategy.READ_WRITE) 对于应用程序2,我必须使用@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)。

所以我想在运行时为application2动态更改这些配置设置。

赞赏,如果有人可以建议这种方法。

1 个答案:

答案 0 :(得分:2)

您不必更改类运行时的缓存策略。你需要一个单独的类,有这样的常量:

public abstract class Settings {
   public static final CacheConcurrencyStrategy CACHE_STRATEGY;

   static {
      // initialize the field, e.g. based on a value from a properties file
   }
}

then 

@Entity
@Table(name = "EMP")
@Cache(usage = Settings.CACHE_STRATEGY)
public class EMPLOYEE extends AbstractEntity {...}

然后只有两个不同的文件,其中包含不同应用程序的属性。

P.S。它不必是具有常量的单独类。从我的角度来看,它只是一个如何更好地组织事物的例子。