2016-08-24 72 views
0

在我的应用程序中,我使用@Type注释启用了jasypt加密。但是当我需要在没有任何加密的情况下部署应用程序时,我必须按照以下方式更改@Type注释的属性。目前我正在手动执行此操作。有没有什么办法可以配置(根据配置值获取@Type注释的属性)?谢谢。如何配置Hibernate @Type注释的属性

@Entity 
@Table 
public class Data { 

    @Id 
    private Integer id; 

    @Type(type = "encryptedString") // Need to enable for Encryption 
    @Type(type = "org.hibernate.type.TextType") // Need to enable for Non Encryption 
    private String data; 
} 
+1

JPA没有这样的'@Type'注解。显然,Hibernate有一个'@Type'注释,但那不是JPA。 –

+1

处理服务层中的加密,并通过例如Spring配置文件基于运行时环境交换Encryption类的不同实现。 –

+0

我已将问题帖子更正为“如何配置Hibernate @Type注释的属性”。谢谢。 – Channa

回答

0

通过使用“JPA实体生命周期回调方法”,我将加密和解密作为一个可配置的参数来处理。 现在Hibernate不负责加密和解密,应用程序相关的DTO本身明确进行加密和解密相关的操作。

@Entity 
@Table 
public class Data { 

    @Id 
    private Integer id; 

    @Type(type = "org.hibernate.type.TextType") 
    private String data; 

    // Before Persist or Update to Database 
    @PrePersist 
    @PreUpdate 
    void beforePersistOrUpdate() { 

     // Do encrypt 
     if(ProjectProperty.isEncryptionEnabled) { 
      this.data = ServiceUtil.commonService.doEncryptString(this.data); 
     } 
    } 

    // Before Load from Database 
    @PostLoad 
    void beforeLoad() { 

     // Do Decrypt 
     if(ProjectProperty.isEncryptionEnabled) { 
      this.data = ServiceUtil.commonService.doDecryptString(this.data); 
     } 
    } 
}