我同意PéterTörök的观点:当前的休眠行为是预期的行为。
例如,当您更新修改用户而不是原始FK的类别时,休眠应该做什么?
你为什么需要原始FK?你只需要做category.getUser()。getId();有权访问它,而不会冒在Category对象中存在不一致状态的风险。
在这种情况下,Hibernate会自动为您处理外键。在Java方面,您不需要考虑外键,而是聚合。这就是为什么 Category 包含(参考a) User 对象,而不是FK。之间的约束力 user 阶级财产 Category 和FK列 USER table在Hibernate映射中指定。
Category
User
user
USER
如果您随后使用这些类创建Criteria或Query,Hibernate将使用正确的FK自动生成SQL查询。我没有HQL的经验,但我很确定Hibernate也能正确处理这个问题。
的 更新: 强> HQL示例:
from Category as category inner join fetch category.user as user
示例改编自 这里 。
有关映射的更多详细信息,请参阅 Hibernate Reference,第5章 到7。