首页 > 解决方案 > Hibernate 在 where 子句中使用连接列创建查询

问题描述

我有一张表,表结构是这样的

package com.abc.domain;


@Entity
@Table(
    name = "ENTITY_DTL"
)

public class MyEntityDtl implements Serializable {

    private static final long serialVersionUID = 1L;
    private static final int NATLTY_CD_LENGTH = 3;


    @Id
    @Column(
        name = "MY_ENTITY_DTL_ID",
        unique = true,
        nullable = false
    )
    @GeneratedValue(
        strategy = GenerationType.SEQUENCE,
        generator = "myEntityDtlIdSeq"
    )
    @SequenceGenerator(
        name = "myEntityDtlIdSeq",
        sequenceName = "MY_ENTITY_DTL_ID_SEQ",
        allocationSize = 1
    )
    private Long MyEntityDtlId;



    @ManyToOne(
        fetch = FetchType.LAZY
    )
    @JoinColumns({@JoinColumn(
    name = "ENTITY_ID",
    referencedColumnName = "ENTITY_ID",
    nullable = false
), @JoinColumn(
    name = "ENTITY_TYPE_CD",
    referencedColumnName = "ENTITY_TYPE_CD",
    nullable = false
)})
    private MyEntity myEntity;


    /* 
    other columns and their getter setter 
    */


}

在这里-我想要实现的是-像这样

使用此列 - ENTITY_ID 和 ENTITY_TYPE_CD 将 MyEntityDtl 表与 Abc 表连接起来。

我如何在不使用查询中的 MyEntity 表的情况下实现它。

因为这将使我在这种情况下额外加入

任何帮助表示赞赏,在此先感谢您

标签: javahibernatenhibernate-mapping

解决方案


由于 fetch 类型是惰性的,我直接使用 join 列来创建连接,它不会影响查询性能,因为 fetch 类型 lzay -

 Query query = getEntityManager().createQuery("SELECT abc FROM ABC abc, MyEntityDtl medtl join medtl.myEntity  me " +
                        " WHERE vsf.rqstId = me.entityId AND  " +
                        " me.entityTypeCd = '?' AND " +
                        " medtl.SOME_OTHER_COLUMN= '?' " ;
                query.setParameter("entityTypeCd", VALUE);
                query.setParameter("SOME_OTHER_COLUMN", VALUE);

推荐阅读