【问题标题】:Hibernate Inner join instead left outterHibernate 内连接而不是左外连接
【发布时间】:2017-04-27 10:58:24
【问题描述】:

我的任务是将左外连接转换为内连接。我和休眠一起工作。 我有实体:

@Entity
@Table("entity1")
public Entity1{
 @Id
 private Integer id;

@ManyToOne(fetch = FetchType.EAGER)
 private Entity2 field;
}

@Entity
@Table("entity2")
public class Entity2{

 @Id
 private String name;

 @ManyToOne(fetch = FetchType.EAGER)
 @JoinTable(name = "entity3_entity2",
            joinColumns = @JoinColumn(name="entity2_name")
            inverseJoinColumns = @JoinColumn(name = "entity3_name"))
 private Entity3 field;
}

@Entity
@Table("entity3")
public class Entity3{

 @Id
 private String name;

 @OneToMany
 private Set<Entity2> field;
}

我有 hql:

SELECT e1 FROM Entity1 e1 inner join fetch e1.field e2 inner join fetch e2.field where e1.id = ?1

结果 SQL 是:

select ... from entity1 inner join entity2 on ... left outer join entity3_entity2 on ...

但我需要在没有任何 sql 查询的情况下使用内部连接获取 entity3 记录。有什么办法吗?

【问题讨论】:

  • 嗨,Alexey,您在这种情况下是否得到重复的行?

标签: hibernate hql inner-join


【解决方案1】:

要在休眠中使用内连接获取记录,可以使用以下查询。

<query name="findEntities">
    <query-param name="id" type="long" /> //pass id to here
    SELECT e1 FROM Entity1 e1
        inner join fetch e1.field e2 
        inner join fetch e2.field e3
    where e1 = :id
</query>

或者

@Query("SELECT e1 FROM Entity1 e1 inner join fetch e1.field e2 inner join fetch e2.field e3 where e1 = ?1")

【讨论】:

  • 我已经尝试过这个查询。但结果 sql 是: select ... from entity1 inner join entity2 on ... left outer join entity3_entity2 on ... inner join entity3 on ....
猜你喜欢
  • 2013-02-25
  • 2017-03-25
  • 2017-07-11
  • 2015-01-11
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
相关资源
最近更新 更多