没有“@Column”注释的JPA实体类

FAR*_*ARS 2 spring hibernate jpa spring-data-jpa spring-boot

我有一段代码,作者在其中创建了一个 JPA 实体。不知何故,它成功地工作了,这对我来说似乎很奇怪,因为并不是每个字段都用“@Column”注释。基于此,这是我的问题:

如果每个字段都没有“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 + "]";
    }

    
}
Run Code Online (Sandbox Code Playgroud)

例如,这是另一个运行正常的类。但这一次,每个字段都带有“@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")
Run Code Online (Sandbox Code Playgroud)

Getter 和 Setter 对所有代码片段都是隐藏的,因为它们看起来就像常规的 getter 和 setter,没有必要显示。

Ali*_*ien 13

如果您没有指定 @Column 注释(可选),则 Hibernate 通过使用驼峰式大小写来使用默认命名策略。

firstName 字段成为数据库中的first_name 列。

您还可以根据需要定义自己的命名策略。

从文档中。

战略 ; Hibernate 5 定义了物理和隐式命名策略。Spring Boot 默认配置 SpringPhysicalNamingStrategy。此实现提供了与 Hibernate 4 相同的表结构:所有点都被下划线替换,驼峰式大小写也被下划线替换。