2010-06-17 5 views
4

몇 가지 방법은 다음과 같이 주석이 된 자바 런타임에 속성 값을 :은 우리의 모델 POJO를에

@Column(name="cli_clipping_id", updatable=false, columnDefinition = "varchar(" + ModelUtils.ID_LENGTH + ") COLLATE utf8_bin") 

columnDefinition 속성은 데이터베이스 공급 업체에 의존, 그래서 HSQLDB에서 스키마를 제거하려고 할 때 최대 절전 모드 사용 실패

[ERROR] 16 jun 12:58:42.480 PM main [org.hibernate.tool.hbm2ddl.SchemaExport] 
Unexpected token: COLLATE in statement [create table cms.edi_editorial_obj (edi_uuid varchar(23) COLLATE] 

이 문제를 해결하려면, 내가이 솔루션을 생각하고 (하지만 가능하지 않은 경우 시간을 보내고 싶지 않아) 주석이 각 방법의 컬럼에 대해, 런타임시 :

  • javaassist를 사용 columnDefinition 널 (null)을 설정, 열 주석의 사본을 작성 @Column 주석
  • 를 가져옵니다. 예전를 무시 복사 열 주석 객체에
  • 세트 열 방법 주석은

는 이러한 방법이 방법을 "해킹"할 수 있는가 (나는이 가능 그것을 모르는)?

어떤 도움이 많이 주시면 감사하겠습니다 ...

+1

나는 이와 비슷한 질문에 대답했다 : http://stackoverflow.com/questions/906671/jpa-how-do-i-specify-the-table-name-corresponding-to-a-class-at-runtime/940380 # 940380 –

답변

3

난 당신이 제안하는 방법이 가능하다고 생각하지 않기 때문에 :

  1. 런타임에서 get 실제로 주석 인터페이스를 구현하는 프록시 클래스 주석 값입니다. 속성에 새 값을 설정할 수 없습니다.
  2. 런타임시 클래스 또는 메소드에 새 주석 값을 설정할 수 없습니다.

그러나 코드 외부에서 매개 변수를 수정할 수있는 Hibernate의 xml 기반 구성으로 이동할 수 있습니다.

1

당신은 ANT로 구축하는 경우에는 사전 컴파일 단계를하고 파일의 코드를 변경하는 정규식을 사용할 수 있습니다.

+0

저는 Ant를 사용하지 않고 코드 소스가 아닌 클래스 파일을 수정하는 방법을 궁금합니다. – Lici

+0

@Lici 대체 솔루션을 제공하려고했습니다. –

+0

알아요 .... (+1) – Lici

0

실제로 이것은 이전 스레드인데 2 번 점에 대한 답변 2가 올바르지 않습니다. 런타임 중에 실제로 클래스 주석을 변경할 수 있습니다.

나는 방법을 위해 그것을 얻는 방법 아직도 흥미 롭다.

+1

예가 있습니까? – Matsemann