엔티티 클래스 이름이 밑줄이 있는 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.PhysicalNamingStrategy
s:
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
'programing' 카테고리의 다른 글
MySQL이 계속 크래시되다 (0) | 2023.02.26 |
---|---|
저장 상태 변경 시 React-redux 구성 요소가 다시 렌더링되지 않음 (0) | 2023.02.26 |
Maven을 통해 Spring Boot에서 활성 프로파일 구성 (0) | 2023.02.26 |
리액트 컴포넌트 'displayName'의 용도는 무엇입니까? (0) | 2023.02.26 |
조건에 따라 ui-sref 사용 안 함 (0) | 2023.02.26 |