programing

엔티티 클래스 이름이 밑줄이 있는 SQL 테이블 이름으로 변환됩니다.

lastcode 2023. 2. 26. 09:47
반응형

엔티티 클래스 이름이 밑줄이 있는 SQL 테이블 이름으로 변환됩니다.

다음 엔티티가 정의되어 있습니다.

@Entity
@Table(name = "EmailTemplate")
public class EmailTemplate {

표의 주석에도 불구하고, 나는 받는java.sql.SQLException: Invalid object name 'email_template'EmailTemplate 등의 엔티티 클래스가 email_template 테이블명으로 변환되지 않도록 하려면 어떻게 해야 합니까?

편집:

Spring Boot: start JPA를 사용하고 있습니다.내 build.gradle 파일에서

compile("org.springframework.boot:spring-boot-starter-data-jpa")

기본적으로 스프링 사용org.springframework.boot.orm.jpa.SpringNamingStrategy낙타 케이스 이름을 밑줄로 구분합니다.설정 시도spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.EJB3NamingStrategy…에.application.properties자세한 것은 이쪽과 이쪽을 봐 주세요.

휴지 상태 v5의 경우:

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Spring Boot 2의 경우(에서 확인)2.2.6.RELEASE설정이어야 합니다.yml파일:

spring:
  jpa:
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

따라서 다음과 같은 모델을 사용할 수 있습니다.

@Table(name = "tblDepartments")
public class Department {
    @Id
    @Column(name = "dpID")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @NotEmpty
    @Size(min = 1, max = 25)
    @Column(name = "dpName", length = 25)
    private String name;

및 시작 시 테이블에 값을 입력합니다.data.sql:

INSERT INTO tblDepartments (dpName) VALUES ('Gryffindor');
INSERT INTO tblDepartments (dpName) VALUES ('Hufflepuff');

이 기능을 사용하여appplication.properties.

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl

사용하다

spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultNamingStrategy

application.properties세트

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

가장 일반적인 두 가지가 있습니다.org.hibernate.boot.model.naming.PhysicalNamingStrategys:

org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
org.hibernate.boot.model.naming.CamelCaseToUnderscoresNamingStrategy
# also deprecated in 2.6 in favor of CamelCaseToUnderscoresNamingStrategy
# for removal in 2.8
org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties유지:

private void applyNamingStrategies(Map<String, Object> properties) {
    applyNamingStrategy(properties, AvailableSettings.IMPLICIT_NAMING_STRATEGY, this.implicitStrategy,
            () -> SpringImplicitNamingStrategy.class.getName());
    applyNamingStrategy(properties, AvailableSettings.PHYSICAL_NAMING_STRATEGY, this.physicalStrategy,
            () -> CamelCaseToUnderscoresNamingStrategy.class.getName());
}

그래서 디폴트로는CamelCaseToUnderscoresNamingStrategy사용 중이고 밑줄이 있습니다.

org.springframework.dao.InvalidDataAccessResourceUsageException: could not execute statement; SQL [n/a];     
nested exception is org.hibernate.exception.SQLGrammarException: could not execute statement

둘 다 필수입니다.

implicit-strategy 
physical-strategy

해결된.

잘못된 개체 이름: JPA(SQL 서버)를 사용한 Springboot

application.yaml/properties에서 다음을 지정합니다.

spring.jpa.spring.naming.spring-spring.jpa.spring.jpa.naming.naming.물리 치료의

jpa: show-sql: false hibernate: ddl-auto: none #임베디드 모드 네이밍이 아닌 경우 기본 "none"으로 설정됩니다.ImplicitNamingStrategyLegacyJpaImpl physical-strategy: org.hibernate.boot.model.naming.Physical Naming Strategy Standard Impl

언급URL : https://stackoverflow.com/questions/29087626/entity-class-name-is-transformed-into-sql-table-name-with-underscores

반응형