我有一些用来探索Hibernate的类。其中一个有一个name字段,我尝试用下面的内容设置它的长度:
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.节“声明列属性”中,它有以下几行:
@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字段的配置?不幸的是,我不想要文档中提到的其他属性,而且我会觉得奇怪的是,您必须指定其中一个属性才能识别长度。
发布于 2014-08-10 04:35:56
如果你想使用混合访问模式(例如,对一些属性使用字段注释,对其他属性使用getter),你必须采取一些额外的步骤。
首先,设置实体的默认访问类型。例如,这会将默认访问类型设置为字段:
@Entity
@Access(AccessType.FIELD)
public class MyEntity { … }然后,对于要在getter上注释的属性,显式地将访问类型设置为PROPERTY:
@Access(AccessType.PROPERTY)
@Column(length=25)
public String getFirstName() { return firstName; }https://stackoverflow.com/questions/25222044
复制相似问题