当前位置: 首页 > 知识库问答 >
问题:

Hibernate模式验证失败,MySQL CHAR映射为String

周宸
2023-03-14

当使用Hibernate validator验证JPA实体是否与数据库模式匹配时(通常设置< code > Hibernate . DDL-auto = verify ),如果遇到映射到< code>String字段的MySQL CHAR,就会失败。

例如,这个MySQL表模式:

CREATE TABLE `item` (
  `id` bigint(20) NOT NULL,
  `name` char(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

可以映射到JPA实体,如下所示:

@Entity
public class Item
{
    @Id
    private Long id;

    @Column
    private String name;
}

验证过程将失败,但出现以下异常:

org . hibernate . tool . Schema . SPI . schemamanagementexception:Schema-validation:在表[item]的列[name]中遇到错误的列类型;找到[char (Types#CHAR)],但应为[varchar(255) (Types#VARCHAR)]

典型的解决方案是在字段上使用Hibernate@Type注释来指定列数据类型,这足以满足验证器的要求:

@Column
@Type(type = "char")
private String name;

当您实际发出需要将ResultSet映射到实体的查询时,您将遇到一组不同的异常(在本例中,Spring Data用于发出查询):

org.springframework.orm.jpa。JpaSystemException:无法通过反射设置字段值[B]值:com.example.Item的[class com.exaample.Item.name]setter。名称嵌套异常是org.hibernate。PropertyAccessException:无法通过反射设置字段值[B]值:com.example.Item.name的[class com.exaample.Item.name]setter

非法描述异常: 无法将字符串字段设置为 com.example.Item.name

共有1个答案

谷出野
2023-03-14

这些异常的解决方案是在实际的JPA@Colpillar注释中设置列定义,而不是在Hibernate特定的@Type注释中设置列定义:

@Column(columnDefinition = "char")
private String name;

这将满足Hibernate验证器,而不会使Hibernate混淆为您实际上正在映射Character字段。

 类似资料:
  • 我刚开始冬眠,尝试一些应该很容易的事情,但我无法让它工作。 有两个表,一个人和一个地址。一个人可以有一个或多个地址,即:一个OneTo多映射。当我试图向两个不同的人添加相同的地址时,我会遇到异常。这几乎就像Unique在连接表的foriegn_key上被强制执行一样。 我的源代码: 人 地址 主要 代码在保存Person对象Harry时崩溃。这是因为在个人地址表中,引用“1”的地址已经存在并分配给

  • 上一章中我们谈论了如何在Vim中映射按键。我们使用的命令map在normal模式下工作。 如果阅读本章之前你自己已经折腾了,可能会注意到这个映射在visual模式一样工作。 你可以使用nmap、vmap和imap命令分别指定映射仅在normal、visual、insert模式有效。 执行如下命令: :::vim :nmap \ dd 在normal模式下,按下\。Vim会删除当前行。 现在进入V

  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • - 我运行了此脚本,但出现了此错误。我怎么做?

  • 我在Spring启动时使用推土机映射器。如果我将数据从实体映射到EntityDTO,那么dozer maper的工作就是将数据从实体类复制到EntityDTO,对于原语也是如此。但是假设我有这样一门课 和名称为EntityDTO的DTO 那么它不会将数据从entityChild映射到EntityChildTos,有人能帮我解决这个问题吗?

  • 我已经安装了WAMP3.0.4,并试图编写一个连接到外部HTTPS web服务的PHP脚本。但这将返回错误: 从上面可以清楚地看出,我是Apache/WAMP的新手。也许有人能解释一下我错过了什么吗?