我发现我使用的数据库在某些字段中包含一些特殊字符,如ASCII控制字符(26 SUB等)。它们导致问题,因为它们使XML无效等。我希望以尽可能最透明的方式过滤掉它们。
是否可以激活JPA中的某些过滤器,它将处理从数据库读取的字符串值并将应用于每个文本字段,而无需手动进行过滤?
当我手动更改实体中的字符串字段时,应用removing invalid XML characters from a string in java中提到的过滤器可以正常工作。
答案 0 :(得分:3)
您可以使用生命周期监听器。您可以在实体内或自己的类中定义侦听器回调方法。在你的情况下,我会创建一个监听器类,因为你似乎需要在多个实体中进行过滤。由于您要过滤来自数据库的数据,因此您可以使用PostLoad
回调。
public class StringFilter {
@PostLoad
public void filter(Object obj) {
// filterString
}
}
然后将您的侦听器类分配给实体:
@EntityListeners({StringFilter.class})
public class SomeEntity {
...