@Entity 및 @Table의 이름 속성
이름 속성이 @Entity와 @Table에 모두 있기 때문에 의문입니다.
예를 들어, 이름 속성에 대해 동일한 값을 가질 수 있습니다.
@Entity(name = "someThing")
@Table(name = "someThing")
그리고 같은 반에 다른 이름을 붙일 수도 있다.
@Entity(name = "someThing")
@Table(name = "otherThing")
이 둘의 차이점은 무엇이고, 왜 우리가 양쪽에서 같은 속성을 가지고 있는지 누가 말해줄 수 있나요?
@Entity(name = "someThing") => this name will be used to name the Entity @Table(name = "someThing") => this name will be used to name a table in DB
따라서 첫 번째 경우 테이블과 엔티티의 이름이 같기 때문에 HQL 또는 JPQL을 쓸 때 엔티티와 동일한 이름으로 테이블에 액세스할 수 있습니다.
그리고 두 번째 경우 쿼리를 작성할 때 @Entity에서 지정된 이름을 사용해야 하며 @Table에서 지정된 이름을 사용하여 DB에서 테이블의 이름을 지정해야 합니다.
HQL에서는그것은 다른 것을 참조할 것이다.DB에 있는 것
@Entity(name = "someThing")
=> 이 이름은 도메인 식별에 사용됩니다.이 이름은 다음에 의해서만 식별됩니다.hql
쿼리 ..즉, 도메인 객체의 이름
@Table(name = "someThing")
=> 이 이름은 도메인 객체가 참조하는 테이블에 사용됩니다.즉..테이블 이름
@Entity
모델 클래스에서 이것이 엔티티 또는 테이블임을 나타내기 위해 유용합니다.
@Table
다른 이름을 지정하려는 경우 테이블에 특정 이름을 지정하기 위해 사용됩니다.
주의: 를 사용하지 않는 경우@Table
동면 시 고려사항@Entity
디폴트로는 테이블명이며,@Entity
해야한다
@Entity
@Table(name = "emp")
public class Employee implements java.io.Serializable
{
}
여기 몇 가지 좋은 프랙티스의 힌트가 있는 실제 예가 있습니다.HQL 쿼리가 왜 HQL을 사용하는지 알아보려고2시간밖에 걸리지 않았습니다.
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: MyEntity is not mapped [SELECT e FROM MyEntity e ...
사용했을 때의 예외my_entity
@Entity 주석에서 확인할 수 있습니다.
@Entity name은 어플리케이션 전체에서 엔티티를 참조하기 위해 사용되며, 특히 HQL 쿼리에서 @Table은 실제 DB 테이블 이름입니다.다음은 예를 제시하겠습니다.
@Entity(name = "SomeThing")
@Table(name = "some_thing")
public class SomeThing {
@Id
private Long id;
}
JPA 저장소는 다음과 같습니다.
@Repository
public interface BikeOfferRepository extends JpaRepository<SomeThing, Long> {
/** A contrived example as in reality you'd use built-in
query for this type of select */
@Query("SELECT o FROM SomeThing WHERE o.id =:id") // <-- Here you use "SomeThing", the entity name in HQL
SomeThing findAllByBikeOwner(@Param("id") Long id);
}
참고로 엔티티 이름에는 클래스 이름 또는 camel-case 이름을 사용하고 테이블 이름 및 열 이름에는 밑줄로 구분하여 소문자를 사용하는 것이 좋습니다(위의 예 참조).DB 명명 규칙에 대한 자세한 내용은 https://www.sqlshack.com/learn-sql-naming-conventions/를 참조하십시오.
실제 데이터베이스(또는 이전 스타일의 JDBC 쿼리를 사용하는 경우)에서는 다음을 사용합니다.
select * from some_thing where id=xxx;
@Table의 이름 속성은 실제 테이블 이름입니다.@Entitiy의 이름은 같은 이름의 @Entity 클래스가 2개 있고 쿼리를 실행할 때 그것들을 구별하는 방법이 필요할 때 유용합니다.
언급URL : https://stackoverflow.com/questions/18732646/name-attribute-in-entity-and-table
'source' 카테고리의 다른 글
MySQL 명령줄을 사용하여 사용자 계정 목록을 가져오려면 어떻게 해야 합니까? (0) | 2022.09.27 |
---|---|
대소문자를 구분하지 않는 검색 (0) | 2022.09.27 |
ImportError: 모듈 이름 지정 요청 없음 (0) | 2022.09.27 |
ROR 마이그레이션 중에 열 유형을 날짜에서 날짜 시간으로 변경 (0) | 2022.09.27 |
여기서 Larabel의 JSON은 SQLSTATE[42000] 오류를 나타냅니다.MariaDB 서버에 해당하는 매뉴얼 확인 (0) | 2022.09.27 |