当前位置: 首页 > news >正文

Hypersistence Utils PostgreSQL专属类型映射:INET、HSTORE、RANGE和TS_VECTOR

Hypersistence Utils PostgreSQL专属类型映射:INET、HSTORE、RANGE和TS_VECTOR

【免费下载链接】hypersistence-utilsThe Hypersistence Utils library (previously known as Hibernate Types) gives you Spring and Hibernate utilities that can help you get the most out of your data access layer.项目地址: https://gitcode.com/gh_mirrors/hy/hypersistence-utils

Hypersistence Utils(前身为Hibernate Types)是一个强大的Spring和Hibernate工具库,它提供了全面的PostgreSQL专属类型映射解决方案,帮助开发者轻松处理INET、HSTORE、RANGE和TS_VECTOR等特殊数据类型,优化数据访问层性能。

为什么需要Hypersistence Utils?

PostgreSQL提供了许多强大的专属数据类型,如INET(网络地址)、HSTORE(键值对)、RANGE(范围类型)和TS_VECTOR(全文搜索向量)。然而,标准JPA/Hibernate通常不直接支持这些类型,导致开发者需要编写大量自定义代码来处理它们。Hypersistence Utils通过提供现成的类型映射,消除了这一痛点,让开发者能够专注于业务逻辑而非数据类型转换。

PostgreSQL INET类型映射

INET类型用于存储IPv4或IPv6地址。Hypersistence Utils提供了PostgreSQLInetType来无缝映射Java的Inet对象与PostgreSQL的INET类型。

核心实现

public class PostgreSQLInetType extends ImmutableType<Inet> { @Override public Inet get(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) throws SQLException { String ip = rs.getString(position); return (ip != null) ? new Inet(ip) : null; } @Override public void set(PreparedStatement st, Inet value, int index, SharedSessionContractImplementor session) throws SQLException { if (value == null) { st.setNull(index, Types.OTHER); } else { Object holder = ReflectionUtils.newInstance("org.postgresql.util.PGobject"); ReflectionUtils.invokeSetter(holder, "type", "inet"); ReflectionUtils.invokeSetter(holder, "value", value.getAddress()); st.setObject(index, holder); } } }

使用方法

在实体类中使用@Type注解指定INET类型:

@Entity public class NetworkDevice { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @Type(type = "io.hypersistence.utils.hibernate.type.basic.PostgreSQLInetType") private Inet ipAddress; // Getters and setters }

PostgreSQL HSTORE类型映射

HSTORE是PostgreSQL的键值对存储类型,非常适合存储半结构化数据。Hypersistence Utils的PostgreSQLHStoreType允许将Java的Map对象直接映射到HSTORE列。

核心实现

public class PostgreSQLHStoreType extends ImmutableType<Map> { @Override protected Map get(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) throws SQLException { return (Map) rs.getObject(position); } @Override protected void set(PreparedStatement st, Map value, int index, SharedSessionContractImplementor session) throws SQLException { st.setObject(index, value); } }

使用方法

@Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @Type(type = "io.hypersistence.utils.hibernate.type.basic.PostgreSQLHStoreType") private Map<String, String> attributes; // Getters and setters }

PostgreSQL RANGE类型映射

RANGE类型允许存储连续范围的值,如日期范围、数字范围等。Hypersistence Utils的PostgreSQLRangeType支持多种范围类型,包括int4range、int8range、numrange、tsrange、tstzrange和daterange。

核心实现

public class PostgreSQLRangeType extends ImmutableType<Range> implements DynamicParameterizedType { @Override protected Range get(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) throws SQLException { Object pgObject = rs.getObject(position); if (pgObject == null) { return null; } String type = ReflectionUtils.invokeGetter(pgObject, "type"); String value = ReflectionUtils.invokeGetter(pgObject, "value"); switch (type) { case "int4range": return Range.integerRange(value); case "int8range": return Range.longRange(value); case "numrange": return Range.bigDecimalRange(value); case "tsrange": return Range.localDateTimeRange(value); case "tstzrange": return Range.zonedDateTimeRange(value); case "daterange": return Range.localDateRange(value); default: throw new HibernateException(new IllegalStateException("The range type [" + type + "] is not supported!")); } } }

使用方法

@Entity public class Reservation { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String guestName; @Type(type = "io.hypersistence.utils.hibernate.type.range.PostgreSQLRangeType") @Column(columnDefinition = "daterange") private Range<LocalDate> dateRange; // Getters and setters }

PostgreSQL TS_VECTOR类型映射

TS_VECTOR类型用于存储全文搜索的预处理文档,支持高效的文本搜索。Hypersistence Utils的PostgreSQLTSVectorType简化了TS_VECTOR类型的映射。

核心实现

public class PostgreSQLTSVectorType extends MutableDynamicParameterizedType<Object, PostgreSQLTSVectorSqlTypeDescriptor, PostgreSQLTSVectorTypeDescriptor> { public PostgreSQLTSVectorType() { super( Object.class, PostgreSQLTSVectorSqlTypeDescriptor.INSTANCE, new PostgreSQLTSVectorTypeDescriptor() ); } public String getName() { return "tsvector"; } }

使用方法

@Entity public class Article { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; @Column(columnDefinition = "text") private String content; @Type(type = "io.hypersistence.utils.hibernate.type.search.PostgreSQLTSVectorType") @Column(columnDefinition = "tsvector") private String searchVector; // Getters and setters }

如何开始使用?

要在项目中使用Hypersistence Utils的PostgreSQL类型映射,只需添加相应的依赖并配置Hibernate类型。具体步骤如下:

  1. 添加依赖:在pom.xml中添加Hypersistence Utils依赖(根据Hibernate版本选择合适的模块):
<dependency> <groupId>io.hypersistence</groupId> <artifactId>hypersistence-utils-hibernate-73</artifactId> <version>3.6.1</version> </dependency>
  1. 配置Hibernate:在Hibernate配置中注册自定义类型:
configuration.registerTypeOverride(PostgreSQLInetType.INSTANCE); configuration.registerTypeOverride(PostgreSQLHStoreType.INSTANCE); configuration.registerTypeOverride(PostgreSQLRangeType.INSTANCE); configuration.registerTypeOverride(PostgreSQLTSVectorType.INSTANCE);
  1. 在实体类中使用:如上述示例所示,在实体类属性上使用@Type注解指定相应的PostgreSQL类型。

总结

Hypersistence Utils为PostgreSQL的特殊数据类型提供了简洁而强大的映射解决方案,使开发者能够充分利用PostgreSQL的高级特性,同时保持JPA/Hibernate的编程模型。通过使用PostgreSQLInetTypePostgreSQLHStoreTypePostgreSQLRangeTypePostgreSQLTSVectorType,开发者可以轻松处理网络地址、键值对、范围值和全文搜索向量,极大地简化了数据访问层的实现。

无论是构建新应用还是迁移现有项目,Hypersistence Utils都是处理PostgreSQL专属类型的理想选择,它不仅提高了开发效率,还确保了代码的可维护性和性能优化。

要开始使用Hypersistence Utils,只需克隆仓库并按照文档进行配置:

git clone https://gitcode.com/gh_mirrors/hy/hypersistence-utils

探索更多高级功能和示例,请查阅项目源码中的测试用例,如:

  • PostgreSQLHStoreTypeTest.java
  • PostgreSQLRangeTypeTest.java
  • PostgreSQLTSVectorTypeTest.java

【免费下载链接】hypersistence-utilsThe Hypersistence Utils library (previously known as Hibernate Types) gives you Spring and Hibernate utilities that can help you get the most out of your data access layer.项目地址: https://gitcode.com/gh_mirrors/hy/hypersistence-utils

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/610880/

相关文章:

  • OpenClaw调试技巧:Qwen3-32B任务执行中的日志分析与问题定位
  • 【自然语言处理 NLP】7.1 机制可解释性(Mechanistic Interpretability)
  • 从零开始:如何开发Skill并上传到ClawHub完整教程
  • 终极时间解析指南:如何用Chrono轻松将自然语言转换为时间对象
  • Symfony Translation Contracts性能优化:大型应用中的翻译缓存策略终极指南
  • 终极指南:如何为Tech-Interview-Cheat-Sheet开源项目贡献代码
  • Jetpack - Media3(ExoPlayer 播放器控制)
  • Sequel批量插入性能终极指南:如何快速处理百万级数据
  • andrej-karpathy-skills与代码文档:自动生成高质量注释
  • OpenClaw版本升级:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF平滑迁移指南
  • OpenClaw技能市场巡礼:千问3.5-27B十大实用自动化模块
  • OpenClaw隐私保护:Qwen3.5-9B本地处理敏感数据的实践
  • OpenClaw技能扩展实战:用Gemma-3-12b-it构建会议纪要生成器
  • TensorFlow社区完全指南:如何深度参与开源AI项目开发
  • Ax快速入门教程:从零开始实现多目标优化
  • OpenClaw安全方案:Phi-3-vision本地处理敏感图文数据实践
  • MySQL Docker生产环境部署清单:15个必须知道的配置参数
  • s2-pro开源TTS部署案例:中小企业快速搭建自有语音合成平台
  • PHP5.2下chunk_split()函数整数溢出漏洞 分析
  • 【4月知网预警】别再交智商税!10款降AI工具实测红黑榜(附零成本自救方案)
  • Vivado实现策略踩坑实录:从‘时序好但功能错’到稳定收敛的配置心得
  • 如何优雅管理JetBrains IDE试用期?3种场景下的完美解决方案
  • C++伸展树与红黑树实现详解
  • 【Cuvil编译器实战指南】:Python AI推理性能提升300%的5步精准配置法
  • Snaffler实战技巧:5个真实场景下的高级配置与优化策略
  • RTCMultiConnection安全机制详解:保护你的实时通信数据
  • vuejs-datepicker高亮日期完全指南:打造智能日历体验
  • 终极LiquidPrompt系统监控指南:实时掌握CPU、内存、电池状态的10个实用技巧
  • OPC UA在C#工业项目中为何频繁断连?3步诊断法+7行核心代码速修方案
  • 2026年不锈钢光圆品牌有哪些,不锈钢六角棒/锻棒/不锈钢方棒/不锈钢黑棒/不锈钢光圆,不锈钢光圆厂商哪家好 - 品牌推荐师