如何处理复合键hibernate

我的hbm.xml文件是这样的:

                    

但我有两个POJO类,分别是“WordhelperWordusage.java”和“WordhelperWordusageId.java”,所以我很困惑,我应该如何处理这些类? 如何实施? 提前致谢! 更新

我确实喜欢这个

 wordhelper_wordusage.save(wordhelper); wordhelper_wordusage.save(wordusage); session.save(wordhelper); session.save(wordusage); session.save(wordhelper_wordusage); 

但它给我这样的例外:

 Hibernate: select max(ID) from SOZANA.WORDFORM Hibernate: select max(ID) from SOZANA.WORDHELPER Exception in thread "main" org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): pojopackage.WordhelperWordusage 

复合PK通常映射到PK类,以便Hibernate可以正确处理它们。 您发布的映射就是这种情况。 请注意,使用PK类并不是必须的,如果省略元素中的class属性,则可以在同一个WordhelperWordusage类中映射这些PK属性(不建议这样做)。 有关更多详细信息,请参阅此相关问题: hibernate复合键 。

至于给定映射文件的实现,创建具有映射中的属性的类是不是足够了?

 package pojopackage; public class WordhelperWordusage { private WordhelperWordusageId id; private Wordhelper wordhelper; private Wordusage wordusge; // Getters / Setters // Implement equals() and hashCode() delegating to id } 

 package pojopackage; public class WordhelperWordusageId { private Integer idwu; private Integer type; // Getters / setters // Implement equals() and hashCode() consistently, using idwu and type. } 

请记住在这些类中一致地实现hashCode()equals() 。 所以WordhelperWordusage的哈希码是它的id的哈希码,当且仅当它们的id相等时它们是相等的。 对于id类,只需散列两个Integer属性,并将它们与equals()进行比较。

WordhelperWordusageId.java类用于构建主键。 它有两个属性idwh和idwu。 这些属性的组合定义了主键。 Hibernate为复合键创建了对象,并重写了equals和hashCode方法。 此对象用于标识主WordhelperWordusage.java对象的键。 所以为简单起见,将对象视为简单的id列属性,唯一不同的是这是对象而不是简单属性,否则所有规则都应用于ID。 exception生成器方案。

这可以帮助你http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/mapping.html#mapping-declaration-component