我可以将PostgreSQL的"stringtype=unspecified"行为设置为默认吗?

我正在尝试让Hibernate将Java枚举字段保存为PostgreSQL 9.6中的枚举列。如果我将字段映射为@Enumerated(STRING),Hibernate会天真地将枚举名称作为列内容。这对于读取来说非常好用(它只是获取字符串表示形式,匹配并返回),但在写入时,服务器会抱怨类型不匹配:expression is of type character varyingPostgreSQL JDBC驱动程序有一个参数stringtype,可以告诉服务器为字符串值推断适当的列类型,并且使用stringtype=unspecified可以成功存储枚举值。然而,我将在外部提供JDBC连接字符串环境下部署我的应用程序,因此在连接字符串中添加stringtype属性是不可行的。 是否有一种方法可以配置服务器(例如使用SET命令),使连接默认处理为stringtype=unspecified
1个回答

很遗憾,答案是否定的。 stringtype不是服务器参数,而是JDBC自己的客户端参数。 在这里检查函数;
org.postgresql.jdbc.PgConnection.getStringVarcharFlag()

这里

org.postgresql.jdbc.PgPreparedStatement.getStringType()
你会发现JDBC根据stringtype属性将参数类型设置为VARCHAR或UNSPECIFIED类型。