2010-03-24 2 views
2

영구적 특성과 연결된 실제 열을 알아야합니다.최대 절전 모드 매핑을 읽는 방법

"

GetColumn이 ("LDocLine "

<property name="lineNumber" column="LINENUMBER" type="integer"/> 

내가 필요로하는 방법은 같은 것이있다 :

클래스 LDocLine는 다음과 같이 최대 절전 모드에 매핑 된이 속성

private Integer lineNumber; 

있다 lineNumber) => "LINENUMBER"

나는 그 존재를 내부적으로 가정하고 있지만 그렇지 않다고 가정한다. 그것이 공개 API에 있다면. 사전

+0

매핑이 누락되었습니다 (표시하지 않음). 어떤 열이 특정 매핑 된 필드를 나타내는 지 확인하는 방법을 알지 못합니다. – PanCrit

+0

수정되었습니다. 감사합니다. –

답변

5

세션 팩토리를 구축하는 데 사용한 Configuration 객체에 액세스 할 수 있습니까? 그렇다면, 당신은 다음을 사용할 수 있습니다

Value v = configuration.getClassMapping(entityName).getProperty(propertyName).getValue(); 
for (Iterator it = v.getColumnIterator(); it.hasNext();) { 
    Column column = (Column) it.next(); 
    column.getName(); // or .getQuotedName() or bunch of other useful stuff 
} 

Column 문서를. 이 구성에 액세스 할 수없는 경우

, 당신은 당신이 내부 구현에 클래스 캐스트해야합니다으로 공개 API를 사용하여 더 이상 기술적있어이 경우 그러나, SessionFactory 인스턴스에서 열 데이터를 얻을 수 있습니다

두 경우 모두 entityName에서
AbstractEntityPersister persister = (AbstractEntityPersister) sessionFactory.getClassMetadata(entityName); 
String[] columnNames = persister.getPropertyColumnNames(propertyName); 

당신의 엔티티 (명시 적으로 오버라이드 (override)하지 않는 한 클래스 명)

+0

사용자 지정 프레임 워크가 숨기 때문에 구성 개체에 액세스 할 수 없지만 이동하는 것처럼 보입니다. 팀에서 사용 가능하도록 설득하려고 노력할 것입니다. 고맙습니다! –

+0

두 번째 기술을 사용하여 완벽하게 작동했습니다. ClassMetadata가 너무 좋지 않습니다. –

0

이 최대 절전 모드는 일반적으로 당신은 HQL 또는 기준을 통해 오브젝트를 retreive하기 위해 열 이름을 참조 할 필요가 없기 때문에 사용하지 않을 무언가에

감사합니다.

왜이 기능이 필요합니까?

1

당신이 당신의 답변에서 언급 한 바와 같이의 이름입니다, 당신은 당신이 겪고있는 '설정'object.In 경우에 대한 액세스 권한을 가지고 있지 않습니다 최대 절전 모드 '세션'개체에 액세스하면 다음 코드가 도움이 될 수 있습니다.

Collection clsMetaData = session.getSessionFactory() 
       .getAllClassMetadata().values(); 
     for (Iterator i = clsMetaData.iterator(); i.hasNext();) { 
      ClassMetadata cmd = (ClassMetadata) i.next(); 
      System.out.println("cmd" + cmd.getEntityName()); 
      for (String s : cmd.getPropertyNames()) { 
       System.out.println("prop:" + s); 
      } 

     } 

이렇게하면 클래스 메타 데이터 정보에 대한 세부 정보를 얻을 수 있습니다.

+0

이전 답변과 동일하지만 캐스팅이없는 해결책. 불행히도 ClassMetadata에는 필요한 정보가 없습니다. –