2010-06-17 73 views
4

在我們的模型中POJO的一些方法已經被註釋是這樣的:修改註釋在運行時的屬性值在Java

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

columnDefinition屬性數據庫供應商相關的,所以試圖在HSQLDB下降模式時使用Hibernate它失敗:

[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] 

爲了解決這個問題,我想這個解決方案(但不想花時間,如果它是不可能的),在運行時,對於每個註釋方法柱:

  • 獲取@Column註釋
  • 創建列註釋的副本,使用javaassist設置columnDefinition null。
  • 組列方法註釋copy列註釋對象覆蓋舊的(我不知道這是可能的)

是否有可能爲「黑客」這些方法的這種方式?

任何幫助,將不勝感激......

+1

我用這個回答了一個類似的問題:http://stackoverflow.com/questions/906671/jpa-how-do-i-specify-the-table-name-corresponding-to-a-class-at-runtime/940380#940380 – 2010-06-17 13:57:53

回答

3

我不認爲你的建議的方法是可行的,因爲:

  1. 註釋值,你get在運行時實際上是代理類實現的註釋界面。您無法爲其屬性設置新值。
  2. 在運行時無法爲類或方法設置新的註釋值。

但是,您可以移動到基於xml的Hibernate配置,您可以從代碼外部修改參數。

1

如果您正在使用ANT建築,你可以做一個預編譯的步驟,並使用正則表達式來更改文件的代碼。

+0

我不使用Ant,我想知道如何修改類文件,而不是代碼源 – Lici 2010-06-17 13:52:47

+0

@Lici我只是想給你一個替代解決方案。 – 2010-06-17 14:23:02

+0

我知道....(+1) – Lici 2010-06-18 05:21:13

0

儘管這實際上是一箇舊線程,上面的答案2對於點2是不正確的: 實際上類的偏移量可以在運行時改變。

我仍然好奇如何完成方法。

+1

你有什麼例子嗎? – Matsemann 2013-06-13 10:56:45