Hibernate无法映射MySQL的varchar(255)数据类型。

4

我该如何定义这一列?我已经尝试了:

    //@Column(name="GLN_NM", nullable=false, length=255)
    //@Column(name="GLN_NM", nullable=false)
    //@Column(name="GLN_NM", nullable=false, columnDefinition="varchar(255)")
    //@Column(name="GLN_NM", nullable=false, type="text")
    //@Column(name="GLN_NM", nullable=false, columnDefinition="text")
    //@Column(name="GLN_NM", nullable=false, columnDefinition="TextType")
    @Column(name="GLN_NM", length=255)
    private String glnNm;

问题原因: Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [GPC_NM] in table [gs1_gpc]; found [text (Types#LONGVARCHAR)], but expecting [longtext (Types#CLOB)]
软件堆栈 * MySQL 5.7.17 * mysql-connector-java-5.1.41 * sbt 0.13.15 * hibernate-core-5.2.10.Final * hibernate-jpa-2.1-api-1.0.0.Final * hibernate-entitymanager-5.2.10.Final * hibernate-validator:5.2.4.Final * hibernate-commons-annotations-5.0.1.Final.jar

我已经阅读了https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html以及以下几篇文章: 6207788, 16641758, 40884306, 28588311, 26774193, 3868096, 12398597, 8355669, 12672764, 10043556, 1262174

开放产品数据(http://www.product-open-data.com/download/)将表定义为:

"Field"         "Type"      "Null"  "Key"   "Default"
"GCP_CD"    "varchar(13)"   "NO"    "PRI"   \N
"GLN_CD"    "varchar(13)"   "NO"    ""  \N
"GLN_NM"    "varchar(255)"  "NO"    ""  \N
"GLN_ADDR_02"   "varchar(38)"   "NO"    ""  \N
"GLN_ADDR_03"   "varchar(38)"   "NO"    ""  \N
"GLN_ADDR_04"   "varchar(38)"   "NO"    ""  \N
"GLN_ADDR_POSTALCODE" "varchar(38)" "NO" "" \N
"GLN_ADDR_CITY" "varchar(38)"   "NO"    ""  \N
"GLN_COUNTRY_ISO_CD" "varchar(38)" "NO" ""  \N
"CONTACT_NAME"  "varchar(38)"   "NO"    ""  \N
"CONTACT_TEL"   "varchar(255)"  "NO"    ""  \N
"CONTACT_HOTLINE" "varchar(255)" "YES"  ""  \N
"CONTACT_FAX"   "varchar(255)"  "NO"    ""  \N
"CONTACT_MAIL"  "varchar(255)"  "NO"    ""  \N
"CONTACT_WEB"   "varchar(255)"  "NO"    ""  \N
"GLN_LAST_CHANGE" "varchar(10)" "NO"    ""  \N
"GLN_PROVIDER"  "varchar(13)"   "NO"    ""  \N
"SEARCH_GTIN_CD" "varchar(13)"  "NO"    ""  \N
"GEPIR_GCP_CD"  "varchar(13)"   "NO"    ""  \N
"ADD_PARTY_ID"  "varchar(13)"   "NO"    ""  \N
"RETURN_CODE"   "varchar(3)"    "NO"    ""  \N
"SOURCE"    "varchar(100)"  "NO"    ""  \N
"SYNC_DT"   "date"  "YES"   ""  \N

提前致谢。


你确定这一列引起了问题吗?你的堆栈跟踪表明,Hibernate 抱怨的是 GPP_NM 而不是 GLN_NM。 - Stefan Haberl
太好了!我讨厌这样误读事情!谢谢!我将专注于 [GPC_NM] 并继续前进。 - Matt Sullivan
2个回答

2

在您的POJO中,不需要像columnDefinition="text"这样指定columnDefinition。

相反,只需在您的POJO中放入以下内容: @Column(name="GLN_NM") private String glnNm;

在您的MySQL中定义该列为: varchar(256) 或 LongText 或 MediumText,根据您的要求而定。


感谢您的尝试 @Column(name="GLN_NM") private String glnNm;原因是: org.hibernate.tool.schema.spi.SchemaManagementException: 模式验证: 在表 [gs1_gpc] 的列 [GPC_NM] 中遇到了错误的列类型; 找到了[text(Types#LONGVARCHAR)], 但期望[longtext (Types#CLOB)]。 - Matt Sullivan
你能展示一下你在mysql中为该列定义的数据类型吗? - Tanmay Delhikar
嗨,Tanmay,我已将其添加到原始帖子中。谢谢。 - Matt Sullivan

1
如上方评论所述,GLN_NM列正常工作。问题出在GPC_NM列(不包括在原始代码中)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接