PostgreSQL上的Hibernate模式生成:错误的列类型UUID而不是INET

时间:2018-06-26 07:16:29

标签: java postgresql hibernate jpa-2.1 hibernate-5.x

我依赖休眠模式生成作为工作流的一部分,因为每次提交对模型的更改都很大。我使用生成的模式来完成用于测试环境的脚本。

正在使用的数据库是PostgreSQL。我将自定义postgres类型INET用于其中一列(我将同时保留IPv4和IPv6值。我需要它提供的类型检查。)

为此,我使用了自定义的休眠UserTypeInetAddressType.java。)

在实体中,我使用特定于休眠的TypeDef来注册自定义UserType,并用Type注释ip值列,如Lamp.java

@Entity
@TypeDef(name = "inet", typeClass = InetAddressType.class)
public class Lamp {
    @Type(type = "inet")
    public InetAddress getIpAddress() {
        return ipAddress;
    }

自定义用户类型与从外部hibernate生成的架构很好地配合使用。但是,当涉及到自动生成时,hibernate会确定正确的类型为UUID

create table lamp (id int8 not null, ip_address uuid, primary key (id))

是否有任何方法来指示休眠模式使用INET而不是UUID?

休眠版本为5.2.17.Final

1 个答案:

答案 0 :(得分:1)

只需将@Column注释与columnDefinition参数一起使用,例如:

@Column(columnDefinition = "inet")