java - 如何让 hibernate 在属性上使用 String.intern

标签 java hibernate

对于某些实体,我们需要在内存中永久保留大量(数千)分离实体。它们的许多属性来自一组有限的字符串(尽管还不足以将其放入枚举中)。是否可以让 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/

相关文章:

java - 如何在 python 中处理等待输入信号?

java - 如何处理数据类型为 float 的表列中的空值

java - 使用 ActionListener 更新时钟 - Java

java - 由 : org. hibernate.AnnotationException 引起:使用 @OneToMany 或 @ManyToMany 定位未映射的类:

java - Hibernate JDBC 批量大小不起作用

java - 合并对象后更改对象(持久性上下文)会中断更新

java - 在类中不可用的函数中添加到数组的元素会丢失其值

在 LWJGL 中加载纹理时发生 Java 致命运行时错误

java - hibernate - 如何在运行时更改属性

java - 使用 JPA Criteria API 进行分页的总行数