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

标签 java hibernate persistence

这里有一个有趣的令人头疼的问题,可以让您开始 5 月份的假期!

我有一个像这样的 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 之外至少有一个属性,我没有任何问题。我有一个笨拙的解决方法是在 id 之外添加一个虚拟字段(糟糕!)然后突然一切正常。

知道为什么会发生这种情况以及我可以做些什么来解决它吗?

预先感谢您的帮助!

最佳答案

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

关于java - 如果所有属性都是键的一部分,为什么 hibernate 的 getPropertyNames 返回一个空列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400671/

相关文章:

java - 如何使用java在不严格的HTML中进行搜索?

java - 无法连接到远程系统上的 Spark

java - 如何从 jar 而不是 .java 文件在 S3 上创建私有(private) Maven 存储库?

java - Spring Boot : only for web application development?

java - 非 PK 列的 Hibernate ManyToOne JOIN 抛出 "Bad value for type int"

java - Hibernate 和多线程逻辑

java - EhCache磁盘持久化——持久化任意对象

java - 无法持久化实体(单向多对一关系)

java - Hibernate集成测试-Jasypt加密跳过参数

android - 房间持久性在更新时删除子项