小编典典

Hibernate或hsql不尊重列长度

sql

我有一个使用Hibernate为HSQL db生成表的应用程序(因为我的应用程序仍在开发中)。在我的域模型中,我已经设定

@Basic
@Column(name = "about", length = 10)
private String about;

当我使用DBVisualizer打开数据库时,可以看到所有设置都正确,除了它无法正常工作外,我的列接受的长度超过10个字符的值。当我尝试在DBVisualier中手动运行查询时,它会失败,但是应该进入休眠状态。

同样非常奇怪的是,当我使用文件(而不是在内存db中)以便看到db结构并且指向DBVisualizer时,它以某种方式断开了连接,因此从那一刻起我对Hibernate所做的更改就不可见了。一切仍然正常,我只是看不到DBVisualizer中的更改,但是我可以在应用程序中看到。

有人对这种奇怪的行为有任何想法吗?

让所有人欢呼

更新

hibernate配置

    <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
    <property name="hibernate.connection.url">jdbc:hsqldb:mem:test</property>
    <property name="hibernate.connection.username">sa</property>
    <property name="hibernate.connection.password"></property>
    <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
    <property name="hbm2ddl.auto">create</property>
    <property name="sql.enforce_strict_size">true</property>

阅读 177

收藏
2021-05-16

共1个答案

小编典典

您的问题可能来自HSQLDB中的限制,如文档所述

HSQLDB数据库最初是在传统模式下创建的,该模式 不强制列大小和精度 。您可以设置属性:sql.enforce_strict_size =
true启用此功能。设置此属性后,将强制提供任何提供的数字和字符类型(CHARACTER和VARCHAR)的列大小和精度。在定义表之前,请使用命令SET
PROPERTY“ sql.enforce_strict_size” TRUE一次。

(强调我的)

2021-05-16