首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate仅在字段的@Column内设置长度,而不是属性

问Hibernate仅在字段的@Column内设置长度,而不是属性
EN

Stack Overflow用户
提问于 2014-08-10 03:08:09
回答 1查看 546关注 0票数 0

我有一些用来探索Hibernate的类。其中一个有一个name字段,我尝试用下面的内容设置它的长度:

代码语言:javascript
复制
private String firstname;
@Column(length=25)
public String getFirstName() { return firstName; }
public void setFirstName(String first) { this.firstName = first; }

我用几个字段做到了这一点,它们都采用相同的模式--我将@Column放在属性firstName上,而不是放在字段firstName上。我读到过,这决定了框架如何访问字段的信息--直接从字段访问,或者从字段的getter/setter访问。

可以将长度放在@Column中该位置的想法在文档中得到了一定程度的确认;在Hibernate参考文档的5.1.4.1.4.节“声明列属性”中,它有以下几行:

代码语言:javascript
复制
@Column(updatable = false, name = "flight_name", nullable = false, length=50)
public String getName() { ... }

所以他们把length属性放在@Column的getter前面。

问题是它不起作用。我的小测试程序为hbm2ddl.auto添加了一个属性"create",这样它就会删除所有内容并重新创建它;该配置也会响应生成的SQL。如果在getter前面有@Column,而不是字段,则生成的字段是VARCHAR(255),与没有@Column的情况相同。

当我将@Column移到字段前面时,它会以指定的长度25创建。

这是一个bug,还是我遗漏了一些关于带注释的Hibernate字段的配置?不幸的是,我不想要文档中提到的其他属性,而且我会觉得奇怪的是,您必须指定其中一个属性才能识别长度。

EN

回答 1

Stack Overflow用户

发布于 2014-08-10 04:35:56

如果你想使用混合访问模式(例如,对一些属性使用字段注释,对其他属性使用getter),你必须采取一些额外的步骤。

首先,设置实体的默认访问类型。例如,这会将默认访问类型设置为字段:

代码语言:javascript
复制
@Entity
@Access(AccessType.FIELD)
public class MyEntity { … }

然后,对于要在getter上注释的属性,显式地将访问类型设置为PROPERTY:

代码语言:javascript
复制
@Access(AccessType.PROPERTY)
@Column(length=25)
public String getFirstName() { return firstName; }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25222044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档