使用Hibernate注释的文本字段

使用Hibernate注释的文本字段,hibernate,annotations,blob,Hibernate,Annotations,Blob,我在设置字符串的类型时遇到问题,它是这样的 public void setTextDesc(String textDesc) { this.textDesc = textDesc; } @Column(name="DESC") @Lob public String getTextDesc() { return textDesc; } 但它不起作用,我检查了mysql模式,它仍然是varchar(255),我也尝试了 @Column(name="DESC", length="9

我在设置字符串的类型时遇到问题,它是这样的

public void setTextDesc(String textDesc) {
    this.textDesc = textDesc;
}

@Column(name="DESC")
@Lob
public String getTextDesc() {
    return textDesc;
}
但它不起作用,我检查了mysql模式,它仍然是varchar(255),我也尝试了

@Column(name="DESC", length="9000")

我正在努力使类型成为文本,任何想法都将不胜感激

您说“我检查了mysql模式,它仍然是varchar(255)”-您希望Hibernate自动更改您的数据库吗?不会的。即使设置了
hibernate.hbm2ddl.auto
,我也不相信hibernate会改变现有的列定义

如果要生成新的数据库创建脚本,
@Lob
应该生成“TEXT”类型的列,前提是您没有明确指定长度(或者如果指定了,并且长度小于65536)。您可以通过在
@Column
注释中显式声明type来强制执行此操作,但请记住,这在数据库之间是不可移植的:

@Column(name="DESC", columnDefinition="TEXT")

有一种方法可以将数据库中“字符串”类型的默认映射设置为“文本”类型

将以下文件保存在实体所在的包中。请同时更改包名

这将在指定包的数据库中将所有“字符串”类型字段设置为“文本”类型

package-info.java

@TypeDefs({
      @TypeDef(name="string",defaultForType=java.lang.String.class,typeClass=org.hibernate.type.TextType.class)
})

package com.package.app;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;

是的,我每次更改注释时都会删除数据库,hbm2ddl.auto处于启用状态,因此我希望在再次检查时它会更改(对于模糊性表示抱歉)。不知怎的,这个定义对我也不起作用。我还缺什么吗?感谢您的输入,顺便说一句。指定
列定义
是尽可能明确的-肯定还有其他事情在进行。您确定Hibernate正确地提取了编译后的类吗?它是否被其他类扩展了?我想不出还有什么其他原因可能会导致这个问题,但是如果你能发布这个类的全部源代码,你的Hibernate配置,并描述你是如何运行这个类的,我肯定会看到有什么事情发生在我身上。你也可以尝试向这个类添加一个伪属性,并生成一个SQL文件形式的模式,看看它是否出现在那里(健全性检查)?我最终通过将@Indexed放在类的顶部使它工作了,但我自己也无法解释为什么会这样……非常欢迎你,但你现在让我非常好奇:-)什么是
@Indexed
?我很确定这不是Hibernate或JPA注释。如果你的意思是
@Index
,那么我真的看不出这将如何改变与上述问题相关的任何事情。。。如果你知道问题出在哪里,如果你把它作为答案贴在这里,我会很感激的-我保证会投赞成票:-)我使用的是@index和@Analyzer,它们都来自hibernate搜索。我仍在调查这个问题。我的信念告诉我,由于我正在为hibernate扩展一个第三方插件库类(gilead-Lightetty),并且由于hibernate注释检测原始java类型以确定db的col def,我认为gilead以某种方式阻止hibernate进行类型转换,除非它是通过搜索实现的,搜索强制它在哪里键入cast。你使用哪个hibernate版本?关于这个问题,跳出的一个问题是,你将一列命名为“DESC”,这是一个保留的MySQL关键字。当您这样做时,Hibernate/MySQL可能会“行为不当”。
@TypeDefs({
      @TypeDef(name="string",defaultForType=java.lang.String.class,typeClass=org.hibernate.type.TextType.class)
})

package com.package.app;

import org.hibernate.annotations.TypeDef;
import org.hibernate.annotations.TypeDefs;