对于某些实体,我们需要在内存中永久保留大量(数千)分离实体。它们的许多属性来自一组有限的字符串(尽管还不足以将其放入枚举中)。是否可以让 hibernate 对这些属性使用 String.intern 以节省空间?
理想情况下,这应该通过我可以在每个属性上放置的注释或易于更改的东西来工作,而不会因这种实现问题而混淆源代码。
最佳答案
正如您自己建议的那样,使用 JPA 属性转换器完全可行。您可以使用 autoApply = true
在一般级别上执行此操作在转换器上,或者您可以使用 @Convert
按字段级别在字段上执行此操作注释。
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
@Converter(autoApply = true)
public class StringInternConverter implements AttributeConverter<String, String> {
@Override
public String convertToDatabaseColumn(String attribute) {
return attribute;
}
@Override
public String convertToEntityAttribute(String dbData) {
return dbData != null? dbData.intern(): null;
}
}
使用 Hibernate 5.2.10 进行测试,效果非常好!
关于java - 如何让 hibernate 在属性上使用 String.intern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31607196/