在innerjoin中映射两个或多个列时,会有一个映射条件和 我可以改变或状况吗?
父表
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "user")
private List<KeyboxDept> keyboxDept;
儿童表
@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "KEY_TARGET_ID", referencedColumnName = "DEPT_ID", insertable = false, updatable = false),
@JoinColumn(name = "KEY_TARGET_UPPER_ID", referencedColumnName = "DEPT_ID", insertable = false, updatable = false)
})
private User user;
查询
select
user0_.user_id as user_id1_3_,
user0_.dept_id as dept_id2_3_,
user0_.posi_id as posi_id3_3_
from
cm_user user0_
inner join
cm_keybox_dept keyboxdept2_
on user0_.dept_id=keyboxdept2_.key_target_id
and user0_.dept_id=keyboxdept2_.key_target_upper_id
where
user0_.user_id=? limit ?
我可以切换and -> or
???
答案 0 :(得分:0)
我不确定JPA但是在Hibernate Using Criteria中我们可以这样做....
Criteria criteria = session.createCriteria(persistentClass);
criteria.createCriteria("propertyName", Criteria.LEFT_JOIN);
答案 1 :(得分:0)
您在实体定义中有cascade = CascadeType.ALL
。这意味着,The operations that must be cascaded to the target of the association
。因此,目标(代码中的KeyboxDept
)必须存在。如果删除它,意味着没有级联操作,我认为生成的sql没有inner
。
答案 2 :(得分:0)
如果搜索条件不是与连接表键匹配的外键,则不能使用此语法,因为外键的单独列部分(@JoinColumn元素)之间显然存在AND关系。这就是生成的本机SQL包含AND的原因。如果需要OR,则需要使用包含OR的单独JPQL查询初始化该成员,并且不需要注释@ManyToOne。