gpt4 book ai didi

java - JPA @JoinColumn 自定义对象类型

转载 作者:行者123 更新时间:2023-12-02 01:29:21 24 4
gpt4 key购买 nike

我正在研究一个使用 JPA 的项目,我对此还很陌生。我遇到了一个我不太理解的逻辑。我有一个名为 A 的实体,它具有以下字段/列:

@Column(name = "COD_UOP_COO")
private String codUopCoo;

然后我在同一个实体中:

    @ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "COD_UOP_COO", referencedColumnName = "COD_UOP")
@BatchFetch(value = BatchFetchType.JOIN)
private B b;

根据我的理解,这意味着通过在中指定的字段上连接表AB来检索b字段>JoinColumn 注释,对吗?但在这种情况下,连接是如何工作的呢? JPA 是否检索 join 子句右侧的实体?
然后我有这个命名查询:

"select a from A a where (a.b.bfield = :parameter)"

这是什么意思?他们为什么要检查实体 B 的字段是否相等?在我的表 A 中,没有任何列是带有 B 的外键。并且b字段不是表A中的列。那么我要检查 A 的哪一列值?我缺少与数据库结构的链接。

最佳答案

JPQL 查询被转换为 SQL 查询。

此查询返回 A 对象,其中 A.COD_UOP_COO = B.COD_UOP 且 B.bfield = 参数。将 bfield 更改为 B 类中元素的数据库列名称。

您可以看到 native 查询将此参数添加到 persistence.xml:

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>

关于java - JPA @JoinColumn 自定义对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56361466/

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