gpt4 book ai didi

java - NamedQuery 未将表置于 OnetoOne 关系中

转载 作者:太空宇宙 更新时间:2023-11-04 14:24:45 27 4
gpt4 key购买 nike

我的项目中的命名查询有问题。我有 2 个具有 OneToOne 关系的实体。

@Entity
@Table(name = "SL_BRANCH_PARAMS")
public class BranchParams implements Identifiable {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SL_BRANCH_PARAM_SEQ_GEN")
@SequenceGenerator(name = "SL_BRANCH_PARAM_SEQ_GEN", sequenceName = "SL_BRANCH_PARAM_SEQ")
private Long id;

@JoinColumn(name = "INTEREST_ACCOUNT_ID")
@OneToOne(fetch = FetchType.EAGER)
private AccountDef interestAccount;
}

第二类带有命名查询

@Entity
@Table(name = "SL_ACCOUNT_DEF")
@NamedQueries({
@NamedQuery(name = "AccountDef.getAvaibleInterestAccountsForBranch",
query = "SELECT ad FROM AccountDef ad LEFT JOIN FETCH ad.branchParamsInterest WHERE ad.branchParamsInterest = NULL ORDER BY ad.id ASC"),
})
public class AccountDef implements Identifiable {
@Id
@Column(name = "ID")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "SL_ACCOUNT_DEF_SEQ_GEN")
@SequenceGenerator(name = "SL_ACCOUNT_DEF_SEQ_GEN", sequenceName = "SL_ACCOUNT_DEF_SEQ")
private Long id;

@OneToOne(fetch = FetchType.EAGER, mappedBy = "interestAccount")
private BranchParams branchParamsInterest;
}

当我执行命名查询时,我将此查询发送到数据库

select
accountdef0_.ID as ID1_10_0_,
branchpara1_.ID as ID1_13_1_,
branchpara1_.INTEREST_ACCOUNT_ID as INTERES16_13_1_
from
SL_ACCOUNT_DEF accountdef0_
left outer join
SL_BRANCH_PARAMS branchpara1_
on accountdef0_.ID=branchpara1_.INTEREST_ACCOUNT_ID
where
accountdef0_.ID is null //this is incorrect
order by
accountdef0_.ID ASC

这是不正确的,因为它在检查 AccountDef 中的 ID 是否为空而不是 BranchParams 中的 ID 时没有给我任何行。

正确的查询应该是这样的

select
accountdef0_.ID as ID1_10_0_,
branchpara1_.ID as ID1_13_1_,
branchpara1_.INTEREST_ACCOUNT_ID as INTERES16_13_1_
from
SL_ACCOUNT_DEF accountdef0_
left outer join
SL_BRANCH_PARAMS branchpara1_
on accountdef0_.ID=branchpara1_.INTEREST_ACCOUNT_ID
where
branchpara1_.ID is null //this is correct
order by
accountdef0_.ID ASC

这样的查询返回我想要的行。我的问题是,为什么命名查询检查 AccountDef 的 null id 值而不是 BranchParams 的值?

最佳答案

也许是这样的?

 @NamedQuery(name = "AccountDef.getAvaibleInterestAccountsForBranch",
query = "SELECT ad FROM AccountDef ad LEFT JOIN FETCH ad.branchParamsInterest bp WHERE bp.interestAccount = NULL ORDER BY ad.id ASC")

关于java - NamedQuery 未将表置于 OnetoOne 关系中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26797060/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com