2009-08-15 146 views
46

我无法设置一个String类型,它会像文本字段使用Hibernate注释

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") 

@Column(name="DESC") 
@Type(type="text") 

我试图让类型是文本,任何想法将十分赞赏!

+0

哪个版本冬眠你用? – Oleksii 2017-12-03 22:11:33

回答

77

你说:“我检查了MySQL的架构,它仍然为varchar(255)” - 你以为休眠,自动改变你的数据库?它不会。即使你设置了hibernate.hbm2ddl.auto,我也不相信Hibernate会改变现有的列定义。

如果您要生成新的数据库创建脚本,@Lob应该生成“TEXT”类型列,如果您没有明确指定长度(或者如果您确实是小于65536)。你总是可以强制通过显式声明类型@Column注释,但是请记住,这不是数据库之间移植:

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

对,我每次更改注释时都会删除数据库,并带有hbm2ddl.auto,所以我希望它会在我再次检查时发生变化(对于歧义)。不知何故,columnDefinition也不适用于我。我错过了别的吗?感谢您的输入,顺便说一句。 – bernardw 2009-08-15 05:23:45

+0

指定'columnDefinition'就像你可以得到的一样清晰 - 必须有其他的事情发生。你确定你的编译类正在被Hibernate正确拾取吗?它是由其他课程扩展/扩展吗?想不到其他任何可能导致这种情况的东西,但是如果你可以发布你的整个源代码给你的这个类,你的Hibernate配置并描述你如何运行它,我一定会看到是否有任何东西跳到我身上。你也可以尝试添加一个虚假的属性到这个类,并生成架构作为SQL文件,看看它是否出现(健全性检查)? – ChssPly76 2009-08-15 05:49:28

+0

我终于通过将@Indexed放在课程的顶部来实现它,但我无法向自己推荐这是为什么...... – bernardw 2009-08-15 05:58:17