我有一张桌子,桌子的结构是这样
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表的情况下实现它。
在这种情况下,这将使我失去更多的加入机会
感谢您的帮助,在此先感谢
答案 0 :(得分:1)
由于访存类型是lazy,我直接使用join列来创建联接,因此不会影响查询性能,因为访存类型为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);