如何在不更改数据库架构的情况下将 UrlType 从 Hibernate 3.6 迁移到 4.3?

How to migrate the UrlType from Hibernate 3.6 to 4.3 without changing database schema?

我正在将一些代码从 Hibernate v3.4 迁移到 v4.3.10。作为数据库,我使用的是 H2。 生成 DDL 时,Hibernate 3.4 将名为 myUrljava.net.URL 字段翻译成:

myUrl BINARY(255),

现在,当使用 Hibernate 4.3.10 时,完全相同的 Java 代码会 "translated" 进入

myUrl VARCHAR(255),

查看文档似乎 Hibernate 3.6 引入了一个新的类型概念 ("type registry"),具体来说 java.net.URL 没有映射到 binary,而是映射到 varchar,这解释了上面生成的不同 DDL。

问题

如何在不更改数据库的情况下将我的 3.4 代码迁移到 4.3.10。即,我希望能够使用 Hibernate 4.3.10 注释代码读取旧数据库。

有问题的代码目前很简单:

@Entity
// anything to add here?
public class SomeClass {

    // what do I need to add here?
    private java.net.URL myUrl;

    ...
}

回答我自己的问题 - 这似乎有效:

@Entity
public class SomeClass {

    @Lob
    @Column(columnDefinition = "binary(255)")
    private java.net.URL myURL;

    ...
}

附加信息:使用 URL 类型的属性作为持久属性是个坏主意,因为在 url.equals(otherUrl) 调用期间 Java URLStreamHandler 尝试解析URL,即发生 DNS 查找。当您的连接速度较慢时,这会降低您的性能,因为您必须等待调用成功或超时...