我有一段代码,作者在其中创建了一个 JPA 实体。不知何故,它成功地工作了,这对我来说似乎很奇怪,因为并不是每个字段都用“@Column”注释。基于此,这是我的问题:
如果每个字段都没有“列”注释(“id”除外),这个类如何才能正常工作(所有数据都成功记录在数据库中)?
/**
* @author Ram Alapure
* @since 05-04-2017
*/
@Entity
@Table(name="User")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private long id;
private String firstName;
private String lastName;
private LocalDate dob;
private String gender;
private String role;
private String email;
private String password;
@Override
public String toString() {
return "User [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", dob=" + dob + ", email="
+ email + "]";
}
}
例如,这里是另一个工作正常的类。但是这一次,在每个字段中都有一个“@Column”注释。我认为这是 JPA 从该字段创建列的先决条件。
@Entity
@Table(name = "address")
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "address_id")
private long id;
@Column(name = "rua")
private String street;
@Column(name = "number")
private int number;
@Column(name = "complement")
private String complement;
@Column(name = "suburb")
private String suburb;
@Column(name = "city")
private String city;
@Column(name = "state")
private String state;
@Column(name = "country")
private String country;
@Column(name = "cep")
Getter 和 Setter 在所有代码段中都是隐藏的,因为它们看起来就像常规的 getter 和 setter,没有必要显示。
最佳答案
如果您不指定 @Column 注释(可选),则 Hibernate 使用驼峰式大小写的默认命名策略。
firstName 字段成为数据库中的 first_name 列。
您也可以根据需要定义自己的命名策略。
来自文档。
策略; Hibernate 5 定义了物理和隐式命名策略。 Spring Boot 默认配置了 SpringPhysicalNamingStrategy。此实现提供与 Hibernate 4 相同的表结构:所有点都替换为下划线,驼峰式大小写也替换为下划线。
关于spring - 没有 "@Column"注释的 JPA 实体类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68521007/