Hibernate / JPA - 如何在不触发延迟加载的情况下获取@ManyToOne字段的id

时间:2012-11-12 11:17:24

标签: hibernate jpa

例如,有一个实体“用户”,其中@ManyToOne(fetch=Lazy)字段为“团队”。我用entityManager.find(User.class, userId)来获取用户。此时,如果我调用user.getTeam(),将向数据库发送查询以获取团队对象。有没有办法在没有额外查询的情况下获得团队ID?

2 个答案:

答案 0 :(得分:4)

出于这些目的,我会将列映射两次。与insert="true"update="true"一样多对一。

然后我追加 TeamId 属性并将其设为int insert="false"update="false"。我使用column

而不是formula映射

第一次选择后,TeamId可用。

答案 1 :(得分:1)

如果您不想使用Hibernate,请在您的用户实体上添加@PostLoad方法,这将设置您的teamId

  1. 添加@Transient teamId属性
  2. 添加@PostLoad方法:
  3. 添加@PostLoad方法

    @PostLoad
        public void updateTeamIdInfos() {
            if (getTeam() != null) {
                setTeamId(getTeam().getId());
            }
        }