spring - 没有 "@Column"注释的 JPA 实体类

标签 spring spring-boot hibernate jpa spring-data-jpa

我有一段代码,作者在其中创建了一个 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/

相关文章:

java - 使用 MyBatis 的 WHERE 子句中的动态列名

java - Spring 3.2 通过 @Resource 对原始类型进行依赖注入(inject)

java - keyHolder.getKey() 返回 null

spring - 如何使用 Spring Batch 读取 .csv 中的动态字段长度?

java - 休息模板 - 没有可用的缓冲区空间(已达到最大连接数?)

java - JPA、 hibernate 、Java。复合主键,其中之一也是外键

java - Spring Boot 。丢失/日志文件端点

java - Apache Camel - 处理 404 错误的最佳方法是什么?

java - Hibernate子表更新父对象

java - Hibernate 中的 ManyToOne 多重连接列