当前位置: 首页 > 面试题库 >

Hibernate 4升级后的“发现:位,预期:布尔值”

薛涛
2023-03-14
问题内容

我正在尝试从Hibernate 3.6.5升级到4.0(以及从Spring 3.0.5升级到Hibernate 4支持所需的3.1)。

现在,对于MySQL和HSQL,我都遇到了带有持久布尔字段的问题:

Caused by: org.hibernate.HibernateException: 
Wrong column type in PUBLIC.PUBLIC.EVENT for column Checked. Found: bit, expected: boolean
    at org.hibernate.mapping.Table.validateColumns(Table.java:282)
    at org.hibernate.cfg.Configuration.validateSchema(Configuration.java:1268)
    at org.hibernate.tool.hbm2ddl.SchemaValidator.validate(SchemaValidator.java:155)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:453)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1737)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1775)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:184)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:314)

JPA
@Entity@Column注释用于域对象中,有问题的字段如下所示:

@Column(name = "Checked")
private boolean checked;

HSQL模式:

Checked bit default 0 not null,

MySQL模式

`Checked` tinyint(1) NOT NULL default '0',

坚持使用Hibernate 4的最简单方法是什么 ?我应该更改数据库架构,Hibernate配置或域类注释吗?

我不知道代码和配置之前是否完全“正确”,但至少在Hibernate 3上可以正常工作。


问题答案:

我通过添加columnDefinition = "BIT"到@Column行来解决此问题。

@Basic
@Column(name = "B", columnDefinition = "BIT", length = 1)
public boolean isB() {
    return b;
}

它在数据库中也定义为“ BIT(1)”。还与TINYINT合作。这是我找到的最简单的解决方案,因为更改是次要的,不需要接触数据库。

使用:MySQL Server 5.5.13,Hibernate 4.1.1,JDK 1.6



 类似资料:
  • 升级发布插件 蓝天采集器2.0版本框架采用thinkphp5.0,从1.x版本升级到2.0后发布插件需要修改代码才能正常使用! 该升级方法适用于:cms发布插件、自定义发布插件 Cms发布插件修改 旧的cms插件目录:根目录/SkycaijiApp/Release/Cms,打开文件例如:WordpressDemoSkycaijiCms.class.php namespace Release\Cm

  • 我还用 春云Hoxton.sr7 Spring-Cloud-Starter-Sleuth 2.2.4 Spring-Cloud-Starter-Zipkin 2.2.4 spring-boot-starter-data-rest 2.2.9 Spring-引导-起动器-石英2.2.9 spring-boot-configuration-processor 2.2.9 Spring-Boot-Sta

  • 我重新安装了最新版本的Android Studio,之后我无法运行任何应用程序。 以下是我发现的: 我正在使用: Android Studio 3.1 JDK ver。1.8.0_161 Gradle Ver。4.4 Android插件版本3.1.0 也是Android.enableaapt2=false 我所尝试的: 运行以前的应用程序 创建新项目并运行它 清理/重建

  • 从1.14.0开始支持预发布、灰度发布,可登陆SOP-Admin,然后选择服务列表进行操作。 使用预发布 SOP中预发布的思路如下: 假设网关工程sop-gateway在阿里云负载均衡有两台服务器,域名分别为: 域名 说明 open1.domain.com 网关服务器1 openpre.domain.com 网关服务器2,作为预发布请求入口 SLB对外域名为:open.domain.com,即开放

  • 从带有SP1的AEM 6.2升级到AEM 6.4后,很少有软件包未安装。旧版本处于已安装状态。 对于新软件包,显示消息为“似乎安装了另一个版本:”请参见下面的屏幕截图。 正因为如此,我可以看到很少的脚本没有更新最新的API。例如AEM 6.4升级实例:

  • 我正在尝试升级到版本。当我试图初始化上下文时,得到如下异常。 罐子清单 spring-aop-4.1。6.释放。jarspring-data-jpa-1.2。0.0发布。jar,spring-security-web-4.0。1.释放。jar,spring-aspects-4.1。6.释放。jar,spring-expression-4.1。6.释放。罐,Spring试验-4.1。6.释放。jar