gpt4 book ai didi

java - Hibernate 仅在字段上设置 @Column 内的长度,而不是属性

转载 作者:行者123 更新时间:2023-12-01 12:39:50 25 4
gpt4 key购买 nike

我有一些类(class)正在探索 Hibernate。其中一个有一个名称字段,我尝试使用以下内容设置它的长度:

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() { ... }

因此他们将 @Column 的长度属性放在 getter 前面。

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

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

这是一个错误,还是我遗漏了有关带有注释的 Hibernate 字段配置的某些内容(其他)?不幸的是,我不希望文档中提到的其他属性,而且我认为你必须指定其中一个属性才能识别长度,这很奇怪。

最佳答案

如果您想使用混合访问模式(即在某些属性的字段上使用注释,而在其他属性的 getter 上使用注释),您必须采取一些额外的步骤。

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

@Entity
@Access(AccessType.FIELD)
public class MyEntity { … }

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

@Access(AccessType.PROPERTY)
@Column(length=25)
public String getFirstName() { return firstName; }

关于java - Hibernate 仅在字段上设置 @Column 内的长度,而不是属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com