使用Hibernate 3.6(可與早期版本的工作爲好,但我沒有測試過),你可以自定義hibernatetool代碼生成跳過創建構造函數,如果他們想擁有超過255個參數,通過創建以下文件:
$ {休眠 - 卡斯特-SRC} /pojo/PojoConstructors.ftl
<#-- /** default constructor */ -->
public ${pojo.getDeclarationName()}() {
}
<#if pojo.needsMinimalConstructor() && pojo.getPropertiesForMinimalConstructor().size() lte 255> <#-- /** minimal constructor */ -->
public ${pojo.getDeclarationName()}(${c2j.asParameterList(pojo.getPropertyClosureForMinimalConstructor(), jdk5, pojo)}) {
<#if pojo.isSubclass() && !pojo.getPropertyClosureForSuperclassMinimalConstructor().isEmpty() >
super(${c2j.asArgumentList(pojo.getPropertyClosureForSuperclassMinimalConstructor())});
</#if>
<#foreach field in pojo.getPropertiesForMinimalConstructor()>
this.${field.name} = ${field.name};
</#foreach>
}
</#if>
<#if pojo.needsFullConstructor() && pojo.getPropertiesForFullConstructor().size() lte 255>
<#-- /** full constructor */ -->
public ${pojo.getDeclarationName()}(${c2j.asParameterList(pojo.getPropertyClosureForFullConstructor(), jdk5, pojo)}) {
<#if pojo.isSubclass() && !pojo.getPropertyClosureForSuperclassFullConstructor().isEmpty()>
super(${c2j.asArgumentList(pojo.getPropertyClosureForSuperclassFullConstructor())});
</#if>
<#foreach field in pojo.getPropertiesForFullConstructor()>
this.${field.name} = ${field.name};
</#foreach>
}
</#if>
這將覆蓋PojoConstructors.ftl在hibernate-tools.jar中。
如果您使用Ant進行構建,則需要確保${hibernate-cust-src}
位於hibernate-tools任務的類路徑中。
<path id="toolslib">
<pathelement location="${hibernate-cust-src}"/>
... [other locations for hibernate-tools and dependencies]
</path>
<taskdef name="hibernatetool"
classname="org.hibernate.tool.ant.HibernateToolTask"
classpathref="toolslib"/>
注意,恕我直言,這是在休眠工具的錯誤,以創建具有> 255個PARAMS構造...
我最終什麼事做 - 我拿了一串,可以進行邏輯分組在一起作爲一個獨立的實體領域,並標記它們作爲我的HBM中的一個組件。它仍然感覺有點冒險,但它是一種簡單的方法,以減少參數的Java類方法的數量,所以我在255. – WhyGeeEx