如果所有属性都是密钥的一部分,为什么hibernate的getPropertyNames返回一个空列表?

时间:2012-05-01 16:16:18

标签: java hibernate persistence

这是一个有趣的头脑搔痒,从五月开始!

我有一个像这样的hibernate映射:

<hibernate-mapping default-lazy="false">
  <class name="my.class.name" table="MY_CLASS_TABLE">
     <composite-id>
       <key-property name="prop1" column="PROP_1" />
       <key-property name="prop2" column="PROP_2" />
       <key-property name="prop3" column="PROP_3" />
     </composite-id>
   </class>
</hibernate-mapping>

这是一个贯穿并构建类名和属性“字典”的函数。在我上课之前我没有问题,出于某种原因,我对getPropertyNames()的调用返回一个空列表。如果composite-id之外至少有一个属性,我没有任何问题。我所拥有的kludgy解决方法是在id之外添加一个虚拟字段(yuck!)然后突然一切正常。

知道为什么会这样,我能做些什么来解决它?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

进一步挖掘后,我发现getIdentifierType()getIdentifierPropertyName()完成了这项工作。对于像这样的复合键,我检查类型以查看它是否是CompositeCustomType或ComponentType的实例,如果是,则将其抛入临时var,并在该临时var上调用getPropertyNames()