source

@Entity 및 @Table의 이름 속성

factcode 2022. 9. 27. 23:46
반응형

@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

반응형